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

Posted

技术标签:

【中文标题】iPhone JSON框架不解析不在对象或数组内的JSON字符串对象【英文标题】:iPhone JSON Framework not parsing JSON string object not within an object or array 【发布时间】:2011-08-23 17:51:40 【问题描述】:

我在 Obj-C (ios) 中使用 JSON 框架来解析来自 RESTful 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 字符串?

谢谢 克里斯

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

您好,在前者上,问题实际上是该值是 JSON 格式的(即带有转义字符),所以我可以通过这种方式获取值,但仍然存在解码问题这由您的第二点处理 - 这有点 hacky - 但它会工作!奇怪的是框架不能处理这种情况,因为它显然有能力处理 javascript 转义的字符串。谢谢,k【参考方案2】:
-(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;

【讨论】:

以上是关于iPhone JSON框架不解析不在对象或数组内的JSON字符串对象的主要内容,如果未能解决你的问题,请参考以下文章

iPhone JSON 数组到变量

使用xcode解析对象内的json数组

需要帮助阅读不在括号 [] 内的 Json 对象列表

如何使用 iPhone 的 JSON 框架以编程方式生成 JSON

iPhone json 库将 json 映射到我自己的对象

MongoDB。如何更新数组内的json属性