0

我在 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 框架返回错误:Token 'string' not expected before outer-most array or object

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

谢谢克里斯

4

2 回答 2

2

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

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

于 2011-08-23T18:04:52.367 回答
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;

}

于 2011-08-23T18:33:36.677 回答