【发布时间】:2014-05-16 13:57:13
【问题描述】:
我正在开发一个使用 json 表示获取数据并使用 NSJSONSerialization 将其转换为基础对象的应用程序。
我的问题是从服务器获取数据后出现的。这是一个响应示例:
{"groups":{"15":{"idgroupcat":"15","name":"\u05e7\u05d1\u05d5\u05e6\u05d4 1","电源":{"9":{"idmaincat":"9","名称":"\u05e8\u05d0\u05e9\u05d9 1","subs":{"12":{"idsubcat":"12","idcategory":"23","name":"\u05ea\u05ea 1","title":"","workpicurl":"","numberofprofs":null,"numberofworks":null,"averageapplicationsperwork":null,"averagecloseprice":null,"averagewhen":"0"}} }}},"16":{"idgroupcat":"16","name":"组 1","mains":{"10":{"idmaincat":"10","name":"main 1","subs":{"13":{"idsubcat":"13","idcategory":"24","name":"sub 1","title":"","workpicurl":"","numberofprofs":null,"numberofworks":null,"averageapplicationsperwork":null,"averagecloseprice":null,"averagewhen":"0"}} },"11":{"idmaincat":"11","name":"main 2","subs":{"14":{"idsubcat":"14","idcategory":"25","name":"sub 2","title":"","workpicurl":"","numberofprofs":null,"numberofworks":null,"averageapplicationsperwork":null,"averagecloseprice":null,"averagewhen":"0"}} },"13":{"idmaincat":"13","name":"main 2","subs":{"16":{"idsubcat":"16","idcategory":"26","name":"sub 2","title":"","workpicurl":"","numberofprofs":null,"numberofworks":null,"averageapplicationsperwork":null,"averagecloseprice":null,"averagewhen":"0"}} },"14":{"idmaincat":"14","name":"main 2","subs":{"17":{"idsubcat":"17","idcategory":"27","name":"sub 2","title":"","workpicurl":"","numberofprofs":null,"numberofworks":null,"averageapplicationsperwork":null,"averagecloseprice":null,"averagewhen":"0"}} },"15":{"idmaincat":"15","name":"main 2","subs":{"18":{"idsubcat":"18","idcategory":"28","name":"sub 2","title":"","workpicurl":"","numberofprofs":null,"numberofworks":null,"averageapplicationsperwork":null,"averagecloseprice":null,"averagewhen":"0"}, "23":{"idsubcat":"23","idcategory":"31","name":"sub 8","title":"","workpicurl":"","numberofprofs":null,"numberofworks":null,"averageapplicationsperwork":null,"averagecloseprice":null,"averagewhen":"0"}, "24":{"idsubcat":"24","idcategory":"32","name":"sub 8","title":"","workpicurl":"","numberofprofs":null,"numberofworks":null,"averageapplicationsperwork":null,"averagecloseprice":null,"averagewhen":"0"}} }}},"17":{"idgroupcat":"17","name":"组 2","mains":{"19":{"idmaincat":"19","name":"main 4","subs":{"22":{"idsubcat":"22","idcategory":"30","name":"sub 6","title":"","workpicurl":"","numberofprofs":null,"numberofworks":null,"averageapplicationsperwork":null,"averagecloseprice":null,"averagewhen":"0"}} }}},"19":{"idgroupcat":"19","name":"组 2","mains":{"18":{"idmaincat":"18","name":"main 3","subs":{"21":{"idsubcat":"21","idcategory":"29","name":"sub 3","title":"","workpicurl":"","numberofprofs":null,"numberofworks":null,"averageapplicationsperwork":null,"averagecloseprice":null,"averagewhen":"0"}} }}},"20":{"idgroupcat":"20","name":"组 2","mains":{"20":{"idmaincat":"20","name":"main 3","subs":{"25":{"idsubcat":"25","idcategory":"33","name":"sub 3","title":"","workpicurl":"","numberofprofs":null,"numberofworks":null,"averageapplicationsperwork":null,"averagecloseprice":null,"averagewhen":"0"}} }}},"21":{"idgroupcat":"21","name":"组 2","mains":{"21":{"idmaincat":"21","name":"main 3","subs":{"26":{"idsubcat":"26","idcategory":"34","name":"sub 3","title":"","workpicurl":"","numberofprofs":null,"numberofworks":null,"averageapplicationsperwork":null,"averagecloseprice":null,"averagewhen":"0"}} }}}}}
一旦我尝试使用 NSJSONSerialization 转换它,它就会返回 null
NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data1 options:kNilOptions error:&err];
如果我使用该方法查看这是否是一个有效的 json 对象,该方法返回 NO。
我知道问题出在服务器响应中,但我不知道针对特定问题向程序员提供什么输入。服务器是用php写的
有什么建议吗? 谢谢,
【问题讨论】:
-
错误变量err返回什么错误?
-
错误很重要,它是有效的JSON:jsonlint.com
-
"操作无法完成。(Cocoa 错误 3840.)"
-
这就是为什么 jsonlint 刚才对我来说很慢,所有的 SO 都在使用它。 :-) 查看导致 JSON 反序列化的几行代码也很有帮助,以证明 data1 确实是发布字符串的 NSData。
-
将 JSON 字符串放入数据很可能是个问题——很可能是因为使用了错误的字符串编码。需要查看更多代码。
标签: php ios objective-c json nsjsonserialization