2015-04-20 40 views
2

請告訴我讀形式的插口數據字典的正確方法:如何從套接字連接讀取字典列表?

{"data": {"abc": [], "pqr": []}, "error": ""}{"data": {"abc": [], "pqr": []}, "error": ""}{"data": {"abc": [], "pqr": []}, "error": ""}{"data": {"abc": [], "pqr": []}, "error": ""}{"data": {"abc": [], "pqr": []}, "error": ""} 

公告有獨立的JSON字典,我們需要將其轉換成字典的名單。我們總是可以通過替換「} {」來使用stringByReplacingOccurrencesOfString方法。但是有沒有更好的方法?

回答

3

假設你已經把字符串字典中的字典:

NSDictionary* jsonSocketData; 

for(NSDictionary* data in jsonSocketData[@"data"]) { 
    /* whatever */ 
    NSLog(@"%@", data[@"abc"]); 
} 

通過我希望你的要求的結果是更喜歡這樣的方式:

{ 
    "result": [ 
     { 
      "data": { 
       "abc": [], 
       "pqr": [] 
      }, 
      "error": "" 
     }, 
     { 
      "data": { 
       "abc": [], 
       "pqr": [] 
      }, 
      "error": "" 
     } 
    ] 
} 

如果你有你的轉換的NSString(JSON)來的NSDictionary:

NSString* jsonString = @".."; 

NSData* data = [jsonString dataUsingEncoding:NSUTF8StringEncoding]; 

NSDictionary* json = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil]; 

編輯

如果你發佈的字符串是你收到我這一招(這樣的JSON將合格的)完全匹配的字符串:

NSString* response = @"..."; 
/* only if you are sure about format */ 
response = [response stringByReplacingOccurrencesOfString: @"}{" withString:@"},{"]; 
/* otherwise you can apply regex, defintely more flexible, with pattern "}(.?){" */ 
response = [NSString stringWithFormat:@"{\"result\":[%@]}", response]; 

這一招後,你可以在上面申請代碼。 順便說一句,在我看來,最好的方法是有一個良好的JSON,而不是應用無聊和自定義解析。

+0

請仔細看一下數據。格式爲{} {} {}位於另一層。現在的挑戰是將其作爲字典數組來閱讀,而不需要破解。 –

+0

因此,當你接受請求時,響應是一個字符串「json-fake」,就像你發佈的字符串一樣? –

+0

閱讀數據沒有問題。格式化是挑戰。我想要做的是用以下格式[{「data」:{「abc」:[],「pqr」:[]},「error」:「」},{「data」 :{「abc」:[],「pqr」:[]},「error」:「」},{「data」:{「abc」:[],「pqr」:[]},「error」: 「」}]。仔細注意括號。 –

-1
var dictionary = ["key" : "value", "key1" : "value1", "key2" : "value2", "Key3" : "Value3"] 

for (key, value) in companies 
{ 
    println("\(value)") 
}