2011-10-07 61 views
-1

解析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

回答

0

的正則表達式會挖出那個城市的名字是:

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

這就是說,更好的答案是從谷歌得到有效的JSON(相當確保他們能夠提供),通過JSON運行解析器,然後遍歷結果的對象。

0

使用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

0

它基本上是JSON,但無效的語法,因爲屬性名稱不加引號包裹(以及數據的被截斷,但我相信你知道)。 (另外,「feature_id」的值已經出現亂碼,但這似乎並不擾亂解析器。)

儘管存在屬性名稱的問題,一些解析器仍然可以接受它,或者它會是相當簡單的過程來將引號過濾到字符串中。

+0

我正在使用的解析器無法解析它。所以我想使用正則表達式來搜索字符串。 – SayeedHussain

+0

正則表達式可能只工作一次,但在下一次數據以不同順序返回時可能會失敗。 –

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

它缺少對象中鍵名稱周圍的引號。 –