iPhone JSON框架不解析JSON字符串对象,不在对象或数组内



我在Obj-C (iOS)中使用JSON框架来解析来自rest式web服务(c#/. net)的响应。

当涉及到数组或对象时,框架是好的,但是其中一个服务调用返回一个字符串:

原始值(在服务器的内存中):41SIdX1GRoyw1174duOrewErZpn/WatH

WCF编码后的http响应中的JSON值:"41SIdX1GRoyw1174duOrewErZpn/WatH"

Android、Windows Phone 7和jQuery上对应的JSON框架可以处理好这个问题。服务器有时也会返回。net WebFaultException,它会自动将错误消息序列化为"Error message here"

JSON框架返回错误:Token 'string' not expected before outer-most array or object

谁知道我如何在Objective C解码javascript字符串?

谢谢克丽丝

我想你是说你正在使用的JSON框架不能处理作为JSON字符串中最外层的实体-它期望一个对象或数组。如果是这种情况,那么测试'['或'{'的第一个非空白字符将是一件很简单的事情,如果不是其中之一,则假定它是一个值。

更简单的是,您总是可以在将输入字符串提供给JSON解析器之前将其包含在'[' ']'中,然后在观察数据之前"丢弃"外部的单元素数组。这允许JSON解析器处理解析任何存在的值格式。

-(NSString*)handleResponseAsString:(NSString*)data{
if(data==nil || [data length] == 0) return nil;
NSString* retVal = nil;
SBJsonParser* parser = [[SBJsonParser alloc] init];
NSArray* items = [parser objectWithString:[NSString stringWithFormat:@"[%@]", data]]; // enclose in [] so that the parser thinks it's an array
if([parser error] == nil)
{
    if([items count] > 0) retVal = (NSString*) [items objectAtIndex:0];
    else NSLog(@"handleResponseAsString parser error: the array had zero elements");
}else{
    NSLog(@"handleResponseAsString error: '%@' could not be decoded due to error: %@", data, [parser error]);
}
[parser release];
return retVal;

}

最新更新