Xcode解析JSON返回NULL

时间:2016-02-10 10:40:41

标签: ios iphone json xcode parsing

我在解析一些JSON数据时遇到问题,这些数据包含嵌套数组中的嵌套数组。我尝试解析的单个JSON对象如下所示:

{  
  "date":1454284800,
  "exercises":[  
     {  
        "name":"Tricep Skull-Crushers",
        "sets":"5",
        "reps":"12",
        "time":"20",
        "weight":"",
        "notes":"testing testing again testing this app which is great "
     },
     {  
        "name":"Barbell Squat",
        "sets":"3",
        "reps":"12",
        "time":"",
        "weight":"45",
        "notes":"some notes"
     }
  ]
} 

我希望将这些对象中的任意数量解析为NSDictionary。我以前用JSON数据成功完成了这项工作,而不是嵌套数组中的嵌套数组。我目前正在使用NSURLSessionDataTask从URL中检索数据,一旦我获得了数据,我将其转换为NSDictionary并使用以下代码将数据拆分为数组:

        theDictionary = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:&jsonError];

        self.namesArray = [[NSMutableArray alloc] init];
        self.setsArray = [[NSMutableArray alloc] init];
        self.repsArray = [[NSMutableArray alloc] init];

        for (NSDictionary *dict in theDictionary) {

            [self.namesArray addObject:[dict objectForKey:@"name"]];
            [self.setsArray addObject:[dict objectForKey:@"sets"]];
            [self.repsArray addObject:[dict objectForKey:@"reps"]];
        }

此代码在以前解析JSON数据时有效,虽然我可以正确地返回数据和响应字符串,但每当我尝试将数据转换为NSDictionaryNSArray时,它仍然会返回{{1 }}。就像我说的那样,这段代码以前用于解析NULL,但没有用JSON对象中的那么多嵌套数组。

有人可以就如何实现这个目的向我提出一些建议吗?

编辑:

我已经发布了下面的完整响应字符串,我收到了上面示例的多个对象。如果有人想在JSON Editor Online中查看此内容,请查看完整回复的外观:

JSON

3 个答案:

答案 0 :(得分:0)

所以我们终于找到了问题。似乎JSON解析换行符(\ n)有问题。我要做的是将JSON数据转换为字符串,删除任何换行符(\ n),然后将字符串转换回数据并将其转换为NSDictionary。有点烦人的是,这花了一天时间才弄清楚是非常简单的事情,但这是我正在使用的最终代码。希望这有助于任何陷入类似问题的人。

        NSString *jsonString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        jsonString = [jsonString stringByReplacingOccurrencesOfString:@"\n" withString:@" "];

        NSData *dataWithoutLineBreaks = [jsonString dataUsingEncoding:NSUTF8StringEncoding];

        NSError *jsonError;
        NSDictionary *jsonDict = [NSJSONSerialization JSONObjectWithData:dataWithoutLineBreaks options:NSJSONReadingMutableContainers error:&jsonError];

答案 1 :(得分:-1)

您的代码中的所有内容都可以,只需对for循环进行微小更改

for (NSDictionary *dict in theDictionary[@"exercises"]) 
{

        [self.namesArray addObject:[dict objectForKey:@"name"]];
        [self.setsArray addObject:[dict objectForKey:@"sets"]];
        [self.repsArray addObject:[dict objectForKey:@"reps"]];




    }

答案 2 :(得分:-1)

这是你在swift中写的答案:

do { 
     let json = try NSJsonSerialization.jsonObjectWithDat(jsondata, options: .AllFragments)
for var i = 0 ; i < json.count ; i++ {
    if let item = json[i] {
        if let date = item["date"]{//do anything}
        if let experience = item["experience"] {
           for ex in experience {
              let name = experience["name"]
              let step = experience["step"]
              let reps = experience["reps"]
              let time = experience["time"]
              let weight = experience["weight"]
              let notes = experience["notes"]
            }
      }
  } catch err as NSError {
     print(err)
  }