日期:2014-05-20  浏览次数:20663 次

objec c转java
解析json格式的。m文件

//
// XmlParser.m
// MyKeDuoMA
//
// Created by liqiyang on 11-3-16.
// Copyright 2011 __MyCompanyName__. All rights reserved.
//

#import "JsonParser.h"
//#import "PublicFunction.h"

#pragma mark -
typedef enum _EJsonValueType
{
EJsonString = 0,
EJsonArray,
EJsonObject,
EJsonFixedValue,
EJsonNumber
}EJsonValueType;

typedef struct _TJsonStruct 
{
NSString* iParam;
NSString* iValue;
NSMutableArray* iChildNodeArray;
EJsonValueType iType;
} TJsonStruct;

@interface CJsonParser (private) 
-(id) Decode:(NSRange*)getRange;
-(void) Close:(NSMutableArray*)aJson;
-(int) GetParameterCount:(NSString*)aParameter JsonStructArray:(NSMutableArray*)aJson;
-(BOOL) GetParameterValue:(NSString*)aParameter Value:(NSMutableString*)aValue JsonStructArray:(NSMutableArray*)aJson;



-(unichar) ConsumeCharAt:(int) aIn;
-(void) ConsumeFirst;
-(void) Consume:(int) aInc;
-(void) ConsumeReset:(int) aIndex;
-(int) ConsumeLeft;
-(void) ConsumeSkipSpace;
-(NSRange) ConsumeGetToken:(NSString*)aInvalidChars;



-(BOOL) isObject:(unichar) aChar;
  -(BOOL) isArray:(unichar) aChar;
  -(BOOL) isNumber:(unichar) aChar;
  -(BOOL) isString:(unichar) aChar;
  -(BOOL) isFixedValue:(NSString*) aChar;


-(NSRange) parseString;
-(NSRange) parseNumber;
-(id) parseObject;
-(id) parseArray;

-(void) PrintDebug:(NSMutableArray*)aJson Level:(int) aLevel;
 
@end


@implementation CJsonParser
 
@synthesize iJsonNodeArray;
@synthesize iLastType;

 
-(id) init
{
self = [super init];
//iJsonNodeArray = [[NSMutableArray alloc] init];
//iLastType = [[NSMutableArray alloc] init];
iCurIndex = 0;
iJsonString = nil;
return self;
}

- (void)dealloc
{
[self Close: iJsonNodeArray];
iJsonNodeArray = nil;
[iJsonString release];
[iLastType release];

[super dealloc];
}

-(void) ParserJsonText: (NSString*)aJsonString
{
if(aJsonString == nil || [aJsonString length] <=0)
{
iJsonString = @"";
return;
}


if(iJsonNodeArray != nil)
{
[self Close:iJsonNodeArray];
iJsonNodeArray = nil;
}

if(iLastType != nil)
{
[iLastType release];
}

iJsonNodeArray = [[NSMutableArray alloc] init];
iLastType = [[NSMutableArray alloc] init];

if (![iJsonString isEqualToString:aJsonString]) {
[iJsonString release];
iJsonString = [aJsonString retain];
}
//NSLog(@"\n\t***************\n%@***********\n",aJsonString);
iJsonNodeArray = [self Decode:nil];
}



-(int) GetParameterCount: (NSString*)aParameter
{
if (iJsonNodeArray == nil || [iJsonNodeArray count] <= 0)
return 0;
else
return [self GetParameterCount:aParameter JsonStructArray:iJsonNodeArray];  
}



-(BOOL) GetParameterValue: (NSString*)aParameter Value:(NSMutableString*)aValue
{
BOOL result = NO;
 
result = [self GetParameterValue:aParameter Value:aValue JsonStructArray:iJsonNodeArray];
if (result == YES && [aValue length] <=0) 
result = NO;
 
return result;
}


-(id) Decode:(NSRange*)aValue
{
//===============

//NSLog(@"%@", @"Decode");

[self ConsumeSkipSpace];
if ([self isArray:[self ConsumeCharAt:0]])
{
EJsonValueType jvt = EJsonArray;
[iLastType addObject:[NSNumber numberWithInt:jvt]];