2011-11-22 1 views
2

JSONを返すWebサービスが作成されていると思います。返されるデータは次のようになります。このJSONデータをiOSで理解して使用する

{"invoice":{"id":44,"number":42,"amount":1139.99,"checkoutStarted":true,"checkoutCompleted":true}} 

私には、有効なJSONのようです。

iOS5でネイティブJSONシリアライザを使用して、データを取得してNSDictionaryとして取得します。ログの

NSError *error; 
    NSDictionary *json = [NSJSONSerialization JSONObjectWithData:[request responseData] options:kNilOptions error:&error]; 
    NSLog(@"json count: %i, key: %@, value: %@", [json count], [json allKeys], [json allValues]); 

出力は次のようになります。だから、

json count: 1, key: (
    invoice 
), value: (
     { 
     amount = "1139.99"; 
     checkoutCompleted = 1; 
     checkoutStarted = 1; 
     id = 44; 
     number = 42; 
    } 
) 

、それはJSONデータは、NSStringのキー「請求書」を持ち、その値はそう

にNSArray ({amount = ..., check...})

であるように私には見えます、ステップスルーするとき、それはラと言い、

​​

しかし:私はNSArrayのに値を変換しますtestInvoiceはCFArrayではありません。私は、配列内の値をプリントアウトした場合:

for (id data in latestInvoice) { 
     NSLog(@"data is %@", data); 
    } 

結果は次のとおりです。それが唯一の「ID」の代わりに「ID = 44」を返す理由を私は理解していない

data is id 
data is checkoutStarted 
data is .. 

。 NSDictionaryにJSONデータを設定した場合、そのキーはNSStringですが値は何ですか?それはNSArrayまたは何か他のですか?

これは私が読んでチュートリアルです: http://www.raywenderlich.com/5492/working-with-json-in-ios-5

編集:NSDictionaryの*のJSONの「値」は、別のNSDictionaryのあるような答えから、それはそうです。私はそれが間違っているNSArrayまたはNSStringだと仮定します。言い換えると、[K、V] NSDictionaryのための* JSON =

+0

ようNSDictionaryのために取らなければならないと思う、それはobjectForKey 'invoice'が実際に文字列であり、そしてあなたはさらにJSONとしてそれを解析する必要があることは可能ですか? –

+0

単純な 'NSLog':NSLog(@" json:%@ "、json);' – zaph

+0

これはNSDictinary *の "value"のようですが、別のNSDictionaryです。私はそれがNSStringかNSArrayのいずれかであったと仮定します。 – okysabeni

答えて

5

[ "請求書"、NSDictionaryの@]問題はこれです:実際には

​​

、それは次のようになります。

NSDictionary *latestInvoice = [json objectForKey:@"invoice"]; 

...あなたが持っているものは辞書であり配列ではないためです。

+1

そして、配列ではすべての値のキーがありません。キーと値のペアがある場合、辞書になる可能性があります。 –

+0

さて、私はNSDictionary * jsonの値はNSArrayだと思ったが、それは別のNSDictionaryであることが分かった。それが私が立ち上がったところです。ヘッドアップをありがとう。 – okysabeni

2

ワウのネイティブJSONパーサーは、それが導入されたことに気付かなかった。

​​

これは実際にはNSDictionaryであり、NSArrayではありません。配列にはキーがありません。あなたはここから能力があるようです。

1

ここで私はあなたがこの

NSData* data = [NSData dataWithContentsOfURL: jsonURL]; 

NSDictionary *office = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil]; 

NSDictionary *invoice = [office objectForKey:@"invoice"]; 
関連する問題