2011-08-23 33 views
0

我使用在的OBJ-C(IOS)的JSON框架解析从一个RESTful web服务的响应(C#/。NET)内。iPhone JSON框架不解析JSON字符串对象不是一个对象或数组

该框架是细,当涉及到数组或对象,但是服务的一个调用返回一个字符串:(在服务器上在存储器中)

原始值: 41SIdX1GRoyw1174duOrewErZpn/WatH

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

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

的JSON框架回来了一个错误:Token 'string' not expected before outer-most array or object

有谁知道我可以解码目标C一个JavaScript字符串?

感谢 克里斯

回答

2

我想你说你正在使用JSON框架无法处理作为一个JSON字符串最外面的实体 - 它期望的对象或数组。如果是这样的话,那将是一件简单的事情来测试第一个非空白字符是“[”或“{”,并且,如果这些没有一个人,以为这是一个值。

仍然更简单,你总是可以包围在输入字符串“[”“]”它馈送到JSON分析器之前,然后观察数据之前“丢弃”外层一个元素数组。这让JSON解析器可以处理解析任何值的格式。

+0

您好,关于前者,问题是真的值JSON格式(即与转义字符),这样我就可以得到价值这种方式,但仍留下了解码的问题由你的第二点处理 - 这有点哈克 - 但它会工作!很奇怪的是,框架无法处理这种情况,因为它显然具有处理JavaScript的转义字符串的能力。谢谢,K – krisdyson

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; 

}