首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SBJSON丢失引号

SBJSON丢失引号
EN

Stack Overflow用户
提问于 2011-05-03 07:10:35
回答 1查看 335关注 0票数 0

我正在使用SBJSON解析器解析JSON响应:

代码语言:javascript
运行
复制
{"status":0,"sessions":[{"name":"kldlksdklsdkl","active":false,"status":"saved","type":"web","key":"30228ee71f09b93aaa2d1738","contributor_id":"lance","created_at":"Mon May 02, 2011 02:35 PM","closed_at":"Mon May 02, 2011 02:46 PM"}{"name":"Blahieririe","active":false,"status":"saved","type":"web","key":"dbd2bbcc8681bba6a6532051","contributor_id":"lance","created_at":"Mon May 02, 2011 01:42 PM","closed_at":"Mon May 02, 2011 02:34 PM"},{"name":"Jim","active":false,"status":"saved","type":"web","key":"ec5bcf18356a29bb4490841f","contributor_id":"lance","created_at":"Fri April 29, 2011 02:37 PM","closed_at":"Fri April 29, 2011 02:38 PM"}]}

在使用以下代码的服务器上:

代码语言:javascript
运行
复制
NSArray *sessionsArray = [dictionary objectForKey:@"sessions"];
    NSArray *tempArray = [[NSArray alloc] init];
    for(NSString *item in sessionsArray){
        NSLog(@"Session Found: \'%@\'",item);

        NSDictionary *myDictionary = [item JSONValue];
    }

我从JSON中得到了一个很好的数组,但是当我尝试将每个部分放到NSDictionary中时,它给了我一个异常,我对它执行了NSLoged操作,并发现一些键和/或值中的引号被删除了,如下所示:

代码语言:javascript
运行
复制
{
active = 1;
"contributor_id" = lance;
"created_at" = "Mon May 02, 2011 03:26 PM";
key = e10e5feeea3425ae213cb4cc;
name = "JSON TEST";
status = active;
type = web;
}

这是JSON解析器中的一个bug吗?还是我做了什么傻事?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-05-03 07:13:49

引号并没有被“删除”。

在JSON中,每个字符串都有引号,但引号本身不是字符串的一部分。例如,如果您编写

代码语言:javascript
运行
复制
NSArray *sessionsArray = [dictionary objectForKey:@"sessions"];
NSDictionary *session = [sessionArray objectAtIndex:0];
NSString sessionName = [session objectForKey:@"name"];

相应的会话名称不会带引号显示。

当您使用NSLog()字典或数组时,Cocoa使用NeXTSTEP属性列表格式来表示字典/数组。在此格式中,如果值是简单的单词,则引号是可选的。

也就是说,您应该按如下方式枚举这些JSON数据:

代码语言:javascript
运行
复制
NSString *jsonString = …;
NSDictionary *jsonResult = [jsonString JSONValue];
NSArray *sessionsArray = [jsonResult objectForKey:@"sessions"];
for (NSDictionary *session in sessionArray) {
    NSString *sessionName = [session objectForKey:@"name"];
    BOOL sessionActive = [[session objectForKey:@"active"] boolValue];
    NSString *sessionStatus = [session objectForKey:@"status"];
    …
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5863462

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档