gpt4 book ai didi

iphone - 在 iPhone 的 Objective-C 中从 Rails 解析 JSON 集合

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:48:47 25 4
gpt4 key购买 nike

我正在使用 TouchJSON 解析 JSON Rails API 的输出,但遇到了困难。总体目标是遍历响应,解析 JSON,为每个 JSON 对象创建一个 Round 实例,并将这些 Round 对象粘贴到 NSArray 中,以便我可以加载它进入 UITableView。因此,如果有比我将要展示的方法更直接的方法来做到这一点(顺便说一句,目前还行不通),请告诉我。

Rails API 正在返回一个看起来像这样的集合:

[
{
"round": { "course_title": "Title A", "result": "+8" }
},
{
"round": { "course_title": "Title B", "result": "+4" }
},
...
]

我也在使用 ASIHTTPRequest,我可以使用以下方式成功获得响应:

NSString *responseString = [request responseString];

但从那里,我似乎无法到达任何地方。以下是 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

我认为从那里我可以循环遍历字典并使用我的 Round 类创建对象映射。但也许这完全是错误的方法。

我的想法是,从 Rails 返回的 JSON 是一个 JSON 对象数组,所以也许这就是 JSON 解析器无法将其识别为有效 JSON 的原因?由此,我有两个问题:

1) TouchJSON 是否应该能够像我的 API 返回的那样接受 JSON 对象数组?

2) 是否可以将 responseString 转换为 NSArray,以便我可以遍历每个“回合”并以这种方式解析 JSON?如果我从响应字符串中删除第一个和最后一个字符(即“[”和“]”),JSON 解析器将只获取集合中的第一个“回合”。

3) 我是否正确地处理了整个过程?

任何提示/建议将不胜感激。

最佳答案

TouchJSON 提供了从 JSON 到 Obj-C 对象的三种主要方式。它们都存在于您已经在使用的 CJSONDeserializer 的 header 中:

- (id)deserialize:(NSData *)inData error:(NSError **)outError;

- (id)deserializeAsDictionary:(NSData *)inData error:(NSError **)outError;
- (id)deserializeAsArray:(NSData *)inData error:(NSError **)outError;

第一个将返回任何内容,可以是字典、数组、字符串或任何 JSON 的根类型。

另外两个需要一个字典或一个数组,如果他们没有得到正确的数据,他们会提示(即返回 nil 并给你一个 NSError)。

关于iphone - 在 iPhone 的 Objective-C 中从 Rails 解析 JSON 集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4809944/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com