目标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},

+0

请提供样本字符串。这是JSon的形式吗? – iphonedev23

+0

它看起来像一个损坏的JSon。我有一个有效JSon的解析器。 – SayeedHussain

+0

使用http://jsonviewer.stack.hu/在线JSon查看器并尝试查找错误。 – iphonedev23

的正则表达式会挖出那个城市的名字是:

/query:"([^"]+)"/m 

这就是说,更好的答案是从谷歌得到有效的JSON(相当确保他们能够提供),通过JSON运行解析器,然后遍历结果的对象。

使用JSONKit

这将允许您访问JSON字符串作为NSArray的NSDictionary的或对象的内容。

然后,你的代码会是这个样子:

NSString *myJSONStr = ... //Get string 
NSArray *myJSONDataObj = [myJSONStr objectFromJSONString]; 

NSString *cityName = [[myJSONDataObj objectAtIndex:1] objectForKey:@"query"]; 
+0

仍然无法解析。 myJSONDataObj初始化为零。 – SayeedHussain

+0

我建议修复你的JSON。 – rjstelling

+0

它是从谷歌地图API返回,我想要的只是城市名称。为什么我应该关心JSon。解决方案在于使用NSScanner或NSRegularExpression搜索来提取城市名称。 – SayeedHussain

它基本上是JSON,但无效的语法,因为属性名称不加引号包裹(以及数据的被截断,但我相信你知道)。 (另外,“feature_id”的值已经出现乱码,但这似乎并不扰乱解析器。)

尽管存在属性名称的问题,一些解析器仍然可以接受它,或者它会是相当简单的过程来将引号过滤到字符串中。

+0

我正在使用的解析器无法解析它。所以我想使用正则表达式来搜索字符串。 – SayeedHussain

+0

正则表达式可能只工作一次,但在下一次数据以不同顺序返回时可能会失败。 –

如果这是您完整的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}, 

]}

+0

它缺少对象中键名称周围的引号。 –