首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用TouchJSON反序列化复杂的JSON结果(字典数组

使用TouchJSON反序列化复杂的JSON结果(字典数组
EN

Stack Overflow用户
提问于 2008-11-13 21:33:00
回答 5查看 19.6K关注 0票数 18

我昨晚用TouchJSON做了几个测试,一般来说,对于简单的情况,它工作得很好。我使用以下代码从文件中读取一些JSON内容,并对其进行反序列化:

代码语言:javascript
复制
NSString *jsonString = [[NSString alloc] initWithContentsOfFile:@"data.json"];
NSData *jsonData = [jsonString dataUsingEncoding:NSUTF32BigEndianStringEncoding];
NSError *error = nil;
NSDictionary *items = [[CJSONDeserializer deserializer] deserializeAsDictionary:jsonData error:&error];
NSLog(@"total items: %d", [items count]);
NSLog(@"error: %@", [error localizedDescription]);

如果我在文件中有一个非常简单的JSON对象(即一个字典),那么它就可以很好地工作:

代码语言:javascript
复制
{"id": "54354", "name": "boohoo"}

通过这种方式,我能够访问值数组,因为我希望根据项在列表中的索引来获取项:

代码语言:javascript
复制
NSArray *items_list = [items allValues];
NSString *name = [items_list objectAtIndex:1];

(我知道我可以使用字典API获取名称)

现在我想反序列化一个半复杂的JSON字符串,它表示一个字典数组。下面是这样的JSON字符串的一个示例:

代码语言:javascript
复制
[{"id": "123456", "name": "touchjson"}, {"id": "3456", "name": "bleh"}]

当我尝试对data.json文件中的这个新内容运行相同的代码时,没有得到任何结果。我的NSLog()调用显示"total items: 0",并且NSError对象中没有返回任何错误。

有什么线索是怎么回事吗?我完全不知道该怎么做,因为没有太多关于TouchJSON的文档,更少的用例。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2008-11-14 00:15:37

这不是一个答案,而是一个指向不同框架的指针:

http://code.google.com/p/json-framework/

我最近一直在使用它,序列化和反序列化来自第三方服务(如Google Local )的复杂数据结构,以及我自己的Objective-C和Perl代码之间的复杂数据结构,完全没有问题。更不用说API非常容易处理了。

祝好运!

票数 8
EN

Stack Overflow用户

发布于 2008-11-14 03:50:44

我是TouchJSON的作者。

最外层的对象应该是字典,而不是数组。字典以外的任何东西都是不合法的。如果你必须有一个数组作为最外层的对象,那么使用这个方法(从技术上讲,这个方法已经过时了,但很快就不会有什么进展了)

代码语言:javascript
复制
- (id)deserialize:(NSData *)inData error:(NSError **)outError;

有关合法和不合法http://www.json.com/json-schema-proposal/的更多信息,请参阅: JSON。

票数 12
EN

Stack Overflow用户

发布于 2008-11-14 03:40:57

JSON的核心是处理对象,您要反序列化的代码应该如下所示

代码语言:javascript
复制
{
  "objects": [{
    "id": "123456",
    "name": "touchjson"
  }, {
    "id": "3456",
    "name": "bleh"
  }]
}

这确实适用于最新的结账。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/288412

复制
相关文章

相似问题

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