2012-10-03 133 views
0

我有JSON是這樣的:從JSON數據如何獲得數據

[{"ID" : "351", "Name" : "Cam123 ", "camIP" : "xxx.xxx.xxx.xxx", 
    "Username" : "admin", "Password" : "damin", "isSupportPin" : "1" }, 
{"ID" : "352", "Name" : "Cam122 ", "camIP" : "xxx.xxx.xxx.xxx", 
    "Username" : "admin", "Password" : "damin", "isSupportPin" : "0" } 
] 

我想isSupportPin與結果:或。

if (x == 1) 
{ 
    mybutton.enabled = TRUE; 
} 
else 
{ 
    mybutton.enabled = FALSE; 
} 

我該怎麼做?

+0

我認爲你想將JSON數據轉換成字典.am我對嗎? –

回答

0

這裏,你有什麼是NSDictionary秒的NSArray。因此,使用SBJSON庫,你可以做如下

SBJsonParser *parser = [SBJsonParser alloc] init]; 
NSArray *data = [parser objectFromString:youJson]; 
for (NSDictionary *d in data) 
{ 
    NSString *value = [d objectForKey:@"Name"]; 
} 

庫可以在http://stig.github.com/json-framework/

+1

除非您需要定位iOS的舊版本,否則最好使用較新的Foundation類進行JSON序列化。它們速度非常快,它們在Foundation中可用,沒有意外,它們不會添加可能會使調試更困難的類別,並且它們遵循與所有其他Foundation序列化類完全相同的模式,這意味着一旦您瞭解了模式,您可以相對容易地序列化/反序列化屬性列表,符合NSCoding的類,JSON數據等。 –

+0

你可以稱我老派;)但優點。我們的客戶通常至少需要iOS 4.3。 – tGilani

+0

是的,我爲我們的任何需要非iOS 5的代碼所做的第一件事情之一就是動態地添加此類並將其歸入外部JSON庫,但至少這樣一切仍然使​​用新的模式,以及任何運行iOS 5+的東西直接使用新類:) –

1

找到假設你有這個數據,它的NSData對象:

// Your JSON is an array, so I'm assuming you already know 
// this and know which element you need. For the purpose 
// of this example, we'll assume you want the first element 
NSData* jsonData = /* assume this is your data from somewhere */ 
NSError* error = nil; 
NSArray* array = [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:&error]; 
if(!array) { 
    // there was an error with the structure of the JSON data... 
} 
if([array count] > 0) { 
    // we got our data in Foundation classes now... 
    NSDictionary* elementData = array[0]; // pick the correct element 
    // Now, extract the 'isSupportPin' attribute 
    NSNumber* isSupportPin = elementData[@"isSupportPin"]; 
    // Enable the button per this item 
    [mybutton setEnabled:[isSupportPin boolValue]]; 
} else { 
    // Valid JSON data, but no elements... do something useful 
} 

上面的示例代碼代碼片段假設你知道你想要讀取哪個元素(我猜這些是用戶行或其他東西),並且知道JSON屬性名稱是什麼(例如,如果isSupportPin實際上沒有在該數組中返回的JSON對象中定義,它無線我會簡單地返回nil,當你發送它-boolValue時它總是評估爲NO)。

最後,上面的代碼是爲ARC編寫的,需要Xcode 4.5或Clang 4.1以及iOS 5.0的部署目標。如果您不使用ARC,使用Xcode的舊版本構建,或者定位5.0以前的版本,則必須調整代碼。

+0

Hey Jason。您的JSON解析行似乎缺少NSJSONSerialization類的名稱。不應該'NSArray * array = [JSONObjectWithData:jsonData options:0 error:&error]'實際上是'NSArray * array = [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:&error]'? –

+0

@MattLong你是對的!哎呀:)謝謝你的頭!請隨時編輯我的答案,以確保正確:) –

0

如果你想獲得弗朗JSONData數據或字典然後用波紋管代碼..

NSString *responseString = [[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] autorelease]; 
NSArray *resultsArray = [responseString JSONValue]; 
for(NSDictionary *item in resultsArray) 
{ 
    NSDictionary *project = [item objectForKey:@"result"];//use your key name insted of result 
    NSLog(@"%@",project); 
} 

,並從下面的鏈接下載JSON庫和教程...

http://mobileorchard.com/tutorial-json-over-http-on-the-iphone/