首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java相关 >

objec c转java解决方法

2012-08-17 
objec c转java解析json格式的。m文件////XmlParser.m//MyKeDuoMA////Created by liqiyang on 11-3-16.//Cop

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]];


return [self parseArray];
}
else if ([self isObject:[self ConsumeCharAt:0]])
{
EJsonValueType jvt = EJsonObject;
[iLastType addObject:[NSNumber numberWithInt: jvt]];
return [self parseObject];
}
else if ([self isString:[self ConsumeCharAt:0]])
{
EJsonValueType jvt = EJsonString;
[iLastType addObject:[NSNumber numberWithInt:jvt]];

if(aValue)
*aValue = [self parseString];

return nil;
}
else if ([self isNumber:[self ConsumeCharAt:0]])
{
EJsonValueType jvt = EJsonNumber; 
[iLastType addObject:[NSNumber numberWithInt:jvt]];

if(aValue)
*aValue = [self parseNumber];

return nil;

}
else
{
// String
NSRange jsonString = [self ConsumeGetToken:@" \t\r\n,}]"];
if ( jsonString.length > 0)
{
if(aValue)
*aValue = jsonString;

if(1)
{
int len = [iJsonString length];
len++;
len--;
}

NSString* subString = [iJsonString substringWithRange:jsonString];

if ([self isFixedValue:subString])
{
EJsonValueType jvt = EJsonFixedValue;
[iLastType addObject:[NSNumber numberWithInt:jvt]];
if(aValue)
*aValue = jsonString;
 
return nil;
}
}

  return nil;
}

return nil;
}


-(NSRange)parseString 
{
//===============
//NSLog(@"%@", @"string");
  NSRange result = NSMakeRange(0, 0);
unichar c;
int startIndex = -1;
[self ConsumeFirst];

c = [self ConsumeCharAt:0];

startIndex = iCurIndex;

while ( c != '"' )
{
[self ConsumeFirst];
c = [self ConsumeCharAt:0];
}
 

if(iCurIndex > startIndex)
{
result = NSMakeRange(startIndex, iCurIndex-startIndex);
}

[self ConsumeFirst]; // skip "
return result;
}

-(NSRange) parseNumber 
{
//===============
//NSLog(@"%@", @"number");
NSRange result = NSMakeRange(0, 0);
unichar c;
int startIndex = -1;

startIndex = iCurIndex;

c = [self ConsumeCharAt:0];
if (c == '+' || c == '-') {
[self ConsumeFirst];
c = [self ConsumeCharAt:0];
}
while ( c>= '0' && c<='9' || c=='.')
{
[self ConsumeFirst];
c = [self ConsumeCharAt:0];
}

if(iCurIndex > startIndex)
{
result = NSMakeRange(startIndex, iCurIndex-startIndex);
}

return result;
}



[解决办法]
听说做objective-c 的人很牛的。

热点排行