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字符串对象的主要内容,如果未能解决你的问题,请参考以下文章