2013-01-13 29 views
0

我是json的新手,並且對如何做到這一點感到困惑。我有這個基本的信息下面我需要轉換將我的nsstring轉換爲json

"trailer": 
     "window":"broken" 
     "sidesteps":"dent" 
    "tractor": 
     "window":"craked" 
     "sidesteps":"missing" 
    "tire": 
     "tire1": 
      "pressure":"120" 
      "rim":"good" 
     "tire2": 
      "pressure":"120" 
      "rim":"good" 
+0

window = broken與rim的差別:好嗎?它不清楚爲什麼有時你使用:和其他=顯示的關係 – propstm

+0

我現在編輯的信息,拖車拖拉機和輪胎是有價值的內部對象。如何或將使用什麼將其轉換爲json並傳遞給服務器 – baste

+0

@baste,你是如何創建上述字符串的?它是以編程方式創建的嗎?這是轉換前的字典嗎? – iDev

回答

3

根據您從textFields中提取的所有值創建一本詞典。它看起來像這樣,

NSDictionary *dictionary = @{@"trailer":@{@"window":@"broken", @"sidesteps":@"missing", @"tractor": @{@"window":@"broken",@"sidesteps":@"missing"}, @"tire":@{@"tire1" : @{@"pressure" : @"120", @"rim":@"good"}}}}; 

輸出:

dictionary = { 
     "trailer": { 
      "window": "broken", 
      "sidesteps": "missing", 
      "tractor": { 
       "window": "broken", 
       "sidesteps": "missing" 
      }, 
      "tire": { 
       "tire1": { 
        "pressure": "120", 
        "rim": "good" 
       } 
      } 
     } 
    } 

您可以使用NSMutableDictionary動態創建一個類似的結構。您可以創建多個可變字典並將其添加爲另一個字典的對象以實現上述結果。

要轉換成你可以這樣做JSON數據,

NSError *error; 
NSData *postData = [NSJSONSerialization dataWithJSONObject:dictionary options:NSJSONWritingPrettyPrinted error:&error]; 

如果你想轉換爲字符串查看數據,

NSString *jsonString = [[NSString alloc] initWithData:postData encoding:NSStringEncodingConversionAllowLossy]; 
NSLog(@"jsonString = %@", jsonString); 

如果你想這個postbody設置爲HTTP請求並將它傳遞給服務器,您可以將其設置爲:

[urlRequest setHTTPBody:postData]; 
+0

當然,這並不能告訴他如何創建「真正的」(動態)字典結構。 (而Apple JSON API很糟糕,因爲它創建了一個NSData,而不是直接轉向NSString,最好使用其中一個開源版本。) –

+0

這只是一個如何轉換爲JSON的例子。如果問題是要創建詞典,我也會包括它。 – iDev

+1

@ ACB3你是最棒的!謝謝你,這是非常有幫助的。我會盡量檢查你提到的字典,但這已經是一個很大的幫助。如果只有我可以投票:)我的聲望仍低於15 :(但是,再次感謝你 – baste

1

假設你知道這是不合法的JSON,它只是應該是一個示意圖,它表示一組嵌套的NSDictionary對象。外部字典包含鍵「拖車」,「拖拉機」和「輪胎」,並且每個對應於一個NSDictionary。 「拖車」的NSDictionary具有鍵「窗口」和「側步」。其他類似,只有「輪胎」有另一層次的NSDictionary嵌套。

至於從文本字段獲取值,這取決於您。你的UI設計是什麼樣的?如果這些是固定字段(鍵值始終相同),那麼您可以讓用戶在列表中填充多個文本字段。

+0

我同意你的解釋 – baste