目标C
解析JSON字符串我有一个非常非常长的NSString具有{查询的出现:“城市名称”目标C
城市名称可以是任意长度的。我希望能够将所有城市名称提取到数组中。
我怎样才能做到这一点?
{建议:[{查询: “金奈,印度泰米尔纳德邦”,解释:{项:[{开始:0结束:7,FEATURE_TYPE: “”,FEATURE_ID: “0x3a5265ea4f7d3361:0x6e61a70b6863d433”匹配:1,目标:1,term_start:0,term_end:7,类型:37},{开始:9,结束:19,FEATURE_TYPE: “”,FEATURE_ID: “0x3b00c582b1189633:0x559475cc463361f0”,型号:545},{开始:21,结束:26,FEATURE_TYPE: “”,FEATURE_ID: “0x30635ff06b92b791:0xd78c4fa1854213a6”,类型:33}]},操作:2,细节:[{值: “IN”,解释:{术语:[{开始: 0,结束:2,FEATURE_TYPE: “”,FEATURE_ID: “0x30635ff06b92b791:0xd78c4fa1854213a6”,类型:33}]}}],TARGET_TYPE:37,信心:0.54653339144809898},
{查询: “奈”,解释: {术语:[{开始:0,结束:7,FEATURE_TYPE: “”,FEATURE_ID:“0x1000000000000000:0x42a93 3fdc808d659“,匹配:1,目标:1,term_start:0,term_end:7,type:856338}]},operation:2,target_type:856338,confidence:0.019136800753524912},{query:”Chennai,1st Avenue,New York ,NY,United States“,解释:{term:[{start:0,end:7,feature_type:”“,feature_id:”0x89c258ba6002c507:0x73911ed16842e4ba“,matched:1,target:1,term_start:0,term_end:7 ,类型:53522},{开始:9,结束:19,FEATURE_TYPE: “”,FEATURE_ID: “0x89c258c29e17b909:0x2bf768350d30b89e”,型号:17},{启动:21,结束:29,FEATURE_TYPE: “”,FEATURE_ID:” 0x89c24fa5d33f083b:0xc80b8f06e177fe62" ,型号:37},{启动:31,结束:33,FEATURE_TYPE: “”,FEATURE_ID: “0x4ccc4bf0f123a5a9:0xddcfc6c1de189567”,型号:545},{启动:35,端48,FEATURE_TYPE: “” ,FEATURE_ID: “0x54eab584e432360b:0x1c3bb99243deb742”,类型:33}]},操作:2,细节:[{值: “US”,解释:{术语:[{开始:0,结束:2,FEATURE_TYPE: “”, FEATURE_ID: “0x54eab584e432360b:0x1c3bb99243deb742”,类型:33}]}}],TARGET_TYPE:53522,信心:0.010777814592616199},
{查询: “奈绝缘,奈,印度泰米尔纳德”,解释:{术语:[{开始:0,结束:18,FEATURE_TYPE: “”,FEATURE_ID: “0x3a52675249167ca9:0xaf9a262855cfd248”,匹配:1,目标:1,term_start:0,term_end:7,类型:53522},{启动:20,结束:27,FEATURE_TYPE: “”,FEATURE_ID: “0x3a5265ea4f7d3361:0x6e61a70b6863d433”,型号:37},{启动:29,端: 39,FEATURE_TYPE: “”,FEATURE_ID: “0x3b00c582b1189633:0x559475cc463361f0”,型号:545},{启动:41,端46,FEATURE_TYPE: “”,FEATURE_ID: “0x30635ff06b92b791:0xd78c4fa1854213a6”,类型:33}]},操作:2,细节:[{值: “IN”,解释:{术语:[{开始:0,结束:2,FEATURE_TYPE: “”,FEATURE_ID: “0x30635ff06b92b791:0xd78c4fa1854213a6”,类型:33}]}}], target_type:53522,confidence:0.0078605968414456173},
{query:“Chennai,Knobelsdorffstraße,Germany”,解释:{term:[{start:0,end:7,feature_type:“”,feature_id:“0x47a851282ee06 D3B:0xd89e4a3bcf4999a3" ,匹配:1,目标:1,term_start:0,term_end:7,类型:53522},{开始:9,结束:27,FEATURE_TYPE: “”,FEATURE_ID: “0x47a850d5ff0b26d9:0xb882dad42f6743db”,类型: 17},{启动:29,结束:36,FEATURE_TYPE: “”,FEATURE_ID: “0x479a721ec2b1be6b:0x75e85d6b8e91e55b”,类型:33}]},操作:2,细节:[{值: “DE”,解释:{术语:[{开始:0,结束:2,FEATURE_TYPE: “”,FEATURE_ID: “0x479a721ec2b1be6b:0x75e85d6b8e91e55b”,类型:33}]}}],TARGET_TYPE:53522,信心:0.0060176870408534602},
的正则表达式会挖出那个城市的名字是:
/query:"([^"]+)"/m
这就是说,更好的答案是从谷歌得到有效的JSON(相当确保他们能够提供),通过JSON运行解析器,然后遍历结果的对象。
使用JSONKit 。
这将允许您访问JSON字符串作为NSArray的NSDictionary的或对象的内容。
然后,你的代码会是这个样子:
NSString *myJSONStr = ... //Get string
NSArray *myJSONDataObj = [myJSONStr objectFromJSONString];
NSString *cityName = [[myJSONDataObj objectAtIndex:1] objectForKey:@"query"];
仍然无法解析。 myJSONDataObj初始化为零。 – SayeedHussain
我建议修复你的JSON。 – rjstelling
它是从谷歌地图API返回,我想要的只是城市名称。为什么我应该关心JSon。解决方案在于使用NSScanner或NSRegularExpression搜索来提取城市名称。 – SayeedHussain
它基本上是JSON,但无效的语法,因为属性名称不加引号包裹(以及数据的被截断,但我相信你知道)。 (另外,“feature_id”的值已经出现乱码,但这似乎并不扰乱解析器。)
尽管存在属性名称的问题,一些解析器仍然可以接受它,或者它会是相当简单的过程来将引号过滤到字符串中。
我正在使用的解析器无法解析它。所以我想使用正则表达式来搜索字符串。 – SayeedHussain
正则表达式可能只工作一次,但在下一次数据以不同顺序返回时可能会失败。 –
如果这是您完整的JSON然后添加“]}”在过去,然后尝试解析。我认为这应该对你有所帮助。
{建议:[{查询: “金奈,印度泰米尔纳德邦”,解释:{项:[{开始:0结束:7,FEATURE_TYPE: “”,FEATURE_ID: “0x3a5265ea4f7d3361:0x6e61a70b6863d433”,匹配:如图1所示,目标:1,term_start:0,term_end:7,类型:37},{开始:9,结束:19,FEATURE_TYPE: “”,FEATURE_ID: “0x3b00c582b1189633:0x559475cc463361f0”,型号:545},{启动:21 ,结束:26,FEATURE_TYPE: “”,FEATURE_ID: “0x30635ff06b92b791:0xd78c4fa1854213a6”,类型:33}]},操作:2,细节:[{值: “IN”,解释:{术语:[{开始:0,端:2,FEATURE_TYPE: “”,FEATURE_ID: “0x30635ff06b92b791:0xd78c4fa1854213a6”,类型:33}]}}],TARGET_TYPE:37,信心:0.54653339144809898},
{query:"Chennai",interpretation:{term:[{start:0,end:7,feature_type:"",feature_id:"0x1000000000000000:0x42a933fdc808d659",matched:1,target:1,term_start:0,term_end:7,type:856338}]},operation:2,target_type:856338,confidence:0.019136800753524912},{query:"Chennai, 1st Avenue, New York, NY, United States",interpretation:{term:[{start:0,end:7,feature_type:"",feature_id:"0x89c258ba6002c507:0x73911ed16842e4ba",matched:1,target:1,term_start:0,term_end:7,type:53522},{start:9,end:19,feature_type:"",feature_id:"0x89c258c29e17b909:0x2bf768350d30b89e",type:17},{start:21,end:29,feature_type:"",feature_id:"0x89c24fa5d33f083b:0xc80b8f06e177fe62",type:37},{start:31,end:33,feature_type:"",feature_id:"0x4ccc4bf0f123a5a9:0xddcfc6c1de189567",type:545},{start:35,end:48,feature_type:"",feature_id:"0x54eab584e432360b:0x1c3bb99243deb742",type:33}]},operation:2,details:[{value:"US",interpretation:{term:[{start:0,end:2,feature_type:"",feature_id:"0x54eab584e432360b:0x1c3bb99243deb742",type:33}]}}],target_type:53522,confidence:0.010777814592616199},
{query:"Chennai Insulation, Chennai, Tamil Nadu, India",interpretation:{term:[{start:0,end:18,feature_type:"",feature_id:"0x3a52675249167ca9:0xaf9a262855cfd248",matched:1,target:1,term_start:0,term_end:7,type:53522},{start:20,end:27,feature_type:"",feature_id:"0x3a5265ea4f7d3361:0x6e61a70b6863d433",type:37},{start:29,end:39,feature_type:"",feature_id:"0x3b00c582b1189633:0x559475cc463361f0",type:545},{start:41,end:46,feature_type:"",feature_id:"0x30635ff06b92b791:0xd78c4fa1854213a6",type:33}]},operation:2,details:[{value:"IN",interpretation:{term:[{start:0,end:2,feature_type:"",feature_id:"0x30635ff06b92b791:0xd78c4fa1854213a6",type:33}]}}],target_type:53522,confidence:0.0078605968414456173},
{query:"Chennai, Knobelsdorffstraße, Germany",interpretation:{term:[{start:0,end:7,feature_type:"",feature_id:"0x47a851282ee06d3b:0xd89e4a3bcf4999a3",matched:1,target:1,term_start:0,term_end:7,type:53522},{start:9,end:27,feature_type:"",feature_id:"0x47a850d5ff0b26d9:0xb882dad42f6743db",type:17},{start:29,end:36,feature_type:"",feature_id:"0x479a721ec2b1be6b:0x75e85d6b8e91e55b",type:33}]},operation:2,details:[{value:"DE",interpretation:{term:[{start:0,end:2,feature_type:"",feature_id:"0x479a721ec2b1be6b:0x75e85d6b8e91e55b",type:33}]}}],target_type:53522,confidence:0.0060176870408534602},
]}
它缺少对象中键名称周围的引号。 –
请提供样本字符串。这是JSon的形式吗? – iphonedev23
它看起来像一个损坏的JSon。我有一个有效JSon的解析器。 – SayeedHussain
使用http://jsonviewer.stack.hu/在线JSon查看器并尝试查找错误。 – iphonedev23