2012-10-03 153 views
1

我知道网络上充满了关于这个的例子,但我已经尝试了一切,并且我错过了一些东西。我想将一个JSON字符串解析为一个dicionary。可可 - 解析一个JSON字符串

E具有与服务器的这种反应:

{"type":"response", "action":"mkac", "result":"[{"Band":"Adele","Hits":422},{"Band":"Bryan Adams","Hits":93},{"Band":"Adai","Hits":30},{"Band":"Adamo","Hits":18},{"Band":"Adelle","Hits":15}]"} 

我做:

NSError *parseError = nil; 
         NSDictionary *outputDictionary = 
         [NSJSONSerialization JSONObjectWithData: [output dataUsingEncoding:NSUTF8StringEncoding] 
                 options: NSJSONReadingMutableContainers 
                  error: &parseError]; 
         NSLog(@"server said: %@", [outputDictionary objectForKey:@"result"]); 

但outputDictionary永诺给我空。

任何人都可以帮助我吗?

非常感谢。

+0

hmmm ...如果有一个由”JSONObjectWithData“返回的错误,你可以检查看看它不会很好 –

+0

看起来合法,错误是:“2012-10-03 15:05:35。207 IOSapp Lite [43330:f803] sparseError:错误域= NSCocoaErrorDomain代码= 3840”操作无法完成。 (可可错误3840.)“(在字符50周围形成的对象很糟糕)。UserInfo = 0xb53e4d0 {NSDebugDescription =字符50周围形成的对象很差。}” –

回答

2

是的,你的json格式不正确。如果你正确地格式化它,你就会明白为什么:

{ 
    "type":"response", 
    "action":"mkac", 
    "result":"[{"Band":"Adele","Hits":422},{"Band":"Bryan Adams","Hits":93},{"Band":"Adai","Hits":30},{"Band":"Adamo","Hits":18},{"Band":"Adelle","Hits":15}]" 
} 

你会发现,对于"result"开始于"字符,这意味着该值是技术上"[{"值。但在此之后,它会遇到Band。由于Band没有用双引号括起(或者在,}等之前),它会生成一个分析错误。如果立即[{之前删除双引号和}]后,然后将它正确地分析:

{ 
    "type":"response", 
    "action":"mkac", 
    "result":[ 
    { 
     "Band":"Adele", 
     "Hits":422 
    }, 
    { 
     "Band":"Bryan Adams", 
     "Hits":93 
    }, 
    { 
     "Band":"Adai", 
     "Hits":30 
    }, 
    { 
     "Band":"Adamo", 
     "Hits":18 
    }, 
    { 
     "Band":"Adelle", 
     "Hits":15 
    } 
    ] 
} 
+0

是的,我现在已经想出来了,但是非常感谢你的回答!我们大问题:)哈哈 –

0

我想通了什么事。 json字符串是无效的,因为“[我必须替换只是[