rph*_*ath 2 iphone json ruby-on-rails objective-c ios
我正在使用TouchJSON来解析JSON Rails API的输出,但是遇到了困难.总体目标是遍历响应,解析JSON,Round为每个JSON对象创建一个实例,并将这些Round对象粘贴到NSArray中,以便我可以将其加载到UITableView.因此,如果有一种比我即将展示的更直接的方式(目前不工作,顺便说一下),请告诉我.
Rails API返回一个类似于以下内容的集合:
[
{
"round": { "course_title": "Title A", "result": "+8" }
},
{
"round": { "course_title": "Title B", "result": "+4" }
},
...
]
Run Code Online (Sandbox Code Playgroud)
我也在使用ASIHTTPRequest,我可以使用以下方法成功获得响应:
NSString *responseString = [request responseString];
Run Code Online (Sandbox Code Playgroud)
但从那里,我似乎无法到达任何地方.这里或多或少是TouchJSON的建议:
NSString *jsonString = [request responseString]; // [{"round":{...}}, ..., {"round:{...}}]
NSData *jsonData = [jsonString dataUsingEncoding:NSUTF32BigEndianStringEncoding];
NSDictionary *dictionary = [[CJSONDeserializer deserializer] deserializeAsDictionary:jsonData error:nil];
// then I do this...
NSLog(@"JSON: %@", dictionary); // JSON: null
Run Code Online (Sandbox Code Playgroud)
我想从那里我可以循环遍历字典并使用我的Round类创建对象映射.但也许这完全是错误的做法.
我的想法是从Rails返回的JSON是一个JSON对象数组,所以也许这就是为什么JSON解析器不能将它识别为有效的JSON?由此,我有两个问题:
1)TouchJSON是否能够接受我的API返回的JSON对象数组?
2)是否可以将responseString强制转换为NSArray,以便循环遍历每个"round"并以这种方式解析JSON?如果我从响应字符串中删除第一个和最后一个字符(即"["和"]"),JSON解析器将只捕获集合中的第一个"圆".
3)我是否正确地处理了整个过程?
任何提示/建议将不胜感激.
sch*_*hwa 21
TouchJSON提供了从JSON到Obj-C对象的三种主要方式.它们都存在于您已经使用的CJSONDeserializer的标题中:
- (id)deserialize:(NSData *)inData error:(NSError **)outError;
- (id)deserializeAsDictionary:(NSData *)inData error:(NSError **)outError;
- (id)deserializeAsArray:(NSData *)inData error:(NSError **)outError;
Run Code Online (Sandbox Code Playgroud)
第一个将返回return,无论是字典,数组,字符串还是JSON的根类型.
另外两个期望一个字典或一个数组,如果他们没有得到正确的数据,他们会抱怨(即返回nil并给你一个NSError).
该deserializeAsDictionary:error:方法CJSONDeserializer依赖于scanJSONDictionary:error:的方法CJSONScanner.该方法期望"字典"是对象文字.因此,您的数据必须以a开头{.由于您的数据是一个数组,您可能希望使用该deserializeAsArray:error:方法CJSONDeserializer.
| 归档时间: |
|
| 查看次数: |
1554 次 |
| 最近记录: |