2013-07-13 40 views
1

所以我試圖做一個返回一些Json的GET請求。從這個請求返回的json有一個id屬性,所以我使用NSJSONSerialization來解析json的類應該有一個id屬性。由於id是保留在objective-c中的,因此我無法將其作爲屬性包含在我的類中。基本上,我的問題歸結爲我應該如何確保id屬性正確解析到我的類的對象中。帶有id屬性的對象的NSJSONSerialization

+0

你可以粘貼到JSON你的問題爲清楚起見,請?我想我知道你在說什麼,但我想確認一下。 – WendiKidd

+0

'id'作爲一個標識符不是非法的(既不是'ID'),但最好使用更具體的名稱。請參閱[在Objective-C中,ID變量的替代名稱是什麼?](http://stackoverflow.com/questions/9505518/what-is-your-alternative-name-for-id-variable-in-objective-c )。也就是說,無論你想要什麼,你都應該能夠命名你的財產。爲什麼它必須完全匹配JSON密鑰? –

+0

沒有要求將JSON對象元素放置在與元素鍵名稱相同的變量中。我想有幾個人使用某種自動化方案將JSON對象元素分配給Objective-C對象屬性,但它遠非「平常」(與Java似乎不知道如何做其他事情的Java不同)。 –

回答

4

是,id是保留關鍵字(雖然,作爲喬希指出,你可以使用它作爲一個變量的名字,他是相當正確的,這是一個壞主意),但它仍然可以被用來作爲一個NSDictionary的鑰匙。例如,如果你的JSON的樣子:

{ "id" : "23432423", "name" : "Jason Boggess" } 

然後可以分析它,如下所示:

NSError *error = nil; 
NSDictionary *dictionary = [NSJSONSerialization JSONObjectWithData:data options:0 error:&error]; 
if (error) { 
    NSLog(@"%s: JSONObjectWithData error: %@", __FUNCTION__, error); 
    return; 
} 
NSString *identifier = dictionary[@"id"]; 
NSString *name = dictionary[@"name"]; 
+1

值得澄清的是,「你可以編寫**字符串**'@」id「'並且不會與類型名稱衝突。」 – 2013-07-13 22:15:08

+2

'id id; id = [[NSObject alloc] init];'不是非法的,雖然這是一個可怕的想法。 –

+0

是的,這真的只是一個小瑣事,@Rob;如果它與真實代碼有任何關聯,我不知道它是什麼。 –

3

如果通過

{ 
    id: 123, 
    name: "Chris" 
} 

NSJSONSerialization作爲NSData對象,你會得到一個NSDictionary有兩個按鍵NSString的與值@"id"@"name",在這一點上,你可以從價值id鍵並將其傳遞給您的Objective-C模型上的一個屬性,該屬性名稱不是id。一個例子是recordId

相關問題