iPhone JSON Framework不解析不在对象或数组中的JSON字符串对象

时间:2011-08-23 17:51:40

标签: iphone ios json json-framework

我在Obj-C(iOS)中使用JSON框架来解析来自RESTful Web服务(C#/ .NET)的响应。

对于数组或对象,框架很好,但其中一个服务调用返回一个字符串:

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

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

这可以通过Android,Windows Phone 7上的对应JSON框架处理,当然还有jQuery。服务器有时也会返回.NET WebFaultException,它会自动将错误消息序列化为"Error message here"

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

任何人都知道如何解码Objective C中的javascript字符串?

感谢 克里斯

2 个答案:

答案 0 :(得分:2)

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

更简单的是,您可以在将输入字符串输入到JSON解析器之前将输入字符串括在'['']'中,然后在观察数据之前“丢弃”外部单元素数组。这使得JSON解析器可以处理解析存在的任何值格式。

答案 1 :(得分:0)

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

}

相关问题