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

发布于 2024-11-30 22:22:17 字数 520 浏览 1 评论 0原文

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

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

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

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

这可以由 Android、Windows Phone 7 和 jQuery 上的对应 JSON 框架处理。服务器有时还会返回 .NET WebFaultException,它会自动将错误消息序列化为“此处出现错误消息”

JSON 框架返回错误:在最外层数组或对象之前不需要令牌“字符串”

有人知道如何在 Objective C 中解码 JavaScript 字符串吗?

谢谢 克里斯

I'm using the JSON framework in Obj-C (iOS) to parse responses from a RESTful webservice (C#/.NET).

The framework is fine when it comes to arrays or objects, but one of the service calls is returning a string:

Raw value (in memory on the server):
41SIdX1GRoyw1174duOrewErZpn/WatH

JSON value in the http response once encoded by WCF:
"41SIdX1GRoyw1174duOrewErZpn\/WatH"

This is processed OK by counterpart JSON frameworks on Android, Windows Phone 7 and, of course, jQuery. The server also sometimes returns a .NET WebFaultException, which would automatically serialize an error message as "Error message here".

The JSON Framework comes back with an error: Token 'string' not expected before outer-most array or object

Anyone know how can I decode a javascript string in Objective C?

thanks
Kris

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

醉酒的小男人 2024-12-07 22:22:17

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

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

I think you're saying that the JSON framework you're using can't handle a value as the outermost entity in a JSON string -- it expects an object or array. If that's the case, it would be a simple matter to test the first non-whitespace character for either '[' or '{', and, if not one of those, assume it's a value.

Simpler still, you could always enclose the input string in '[' ']' before feeding it to the JSON parser, then "discard" the outer one-element array before observing the data. This lets the JSON parser handle parsing whatever value format is present.

两个我 2024-12-07 22:22:17
-(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;

}

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

}

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文