我昨晚用TouchJSON做了几个测试,一般来说,对于简单的情况,它工作得很好。我使用以下代码从文件中读取一些JSON内容,并对其进行反序列化:
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对象(即一个字典),那么它就可以很好地工作:
{"id": "54354", "name": "boohoo"}
通过这种方式,我能够访问值数组,因为我希望根据项在列表中的索引来获取项:
NSArray *items_list = [items allValues];
NSString *name = [items_list objectAtIndex:1];
(我知道我可以使用字典API获取名称)
现在我想反序列化一个半复杂的JSON字符串,它表示一个字典数组。下面是这样的JSON字符串的一个示例:
[{"id": "123456", "name": "touchjson"}, {"id": "3456", "name": "bleh"}]
当我尝试对data.json文件中的这个新内容运行相同的代码时,没有得到任何结果。我的NSLog()调用显示"total items: 0",并且NSError对象中没有返回任何错误。
有什么线索是怎么回事吗?我完全不知道该怎么做,因为没有太多关于TouchJSON的文档,更少的用例。
发布于 2008-11-14 00:15:37
这不是一个答案,而是一个指向不同框架的指针:
http://code.google.com/p/json-framework/
我最近一直在使用它,序列化和反序列化来自第三方服务(如Google Local )的复杂数据结构,以及我自己的Objective-C和Perl代码之间的复杂数据结构,完全没有问题。更不用说API非常容易处理了。
祝好运!
发布于 2008-11-14 03:50:44
我是TouchJSON的作者。
最外层的对象应该是字典,而不是数组。字典以外的任何东西都是不合法的。如果你必须有一个数组作为最外层的对象,那么使用这个方法(从技术上讲,这个方法已经过时了,但很快就不会有什么进展了)
- (id)deserialize:(NSData *)inData error:(NSError **)outError;
有关合法和不合法http://www.json.com/json-schema-proposal/的更多信息,请参阅: JSON。
发布于 2008-11-14 03:40:57
JSON的核心是处理对象,您要反序列化的代码应该如下所示
{
"objects": [{
"id": "123456",
"name": "touchjson"
}, {
"id": "3456",
"name": "bleh"
}]
}
这确实适用于最新的结账。
https://stackoverflow.com/questions/288412
复制相似问题