2012-03-21 11 views
0

私はかなり大きなJSONファイルを解析しようとしている、と私は問題SBJSON解析問題は

JSONがどのように見えるかの例のビットを持ち始めています。この

{ 
"info":"info", 
"products":[ 
      { 
      "name":"HomeScreen", 
      "screens":[ 
         { 
         "name":"View Details", 
         "id":1, 
         "title":{ 
         "name":"Default_Name", 
         "number":"Default_Number" 
         }, 
         "widgets":[ 
            { 
            "id":8, 
            "splits":[ 
              { 
              "control":{ 
              "type":1, 
              "limitLow":0, 
              "limitHigh":100 
              }, 
              "texts":[ 
                { 
                "value":"blah", 
                "style":{ 
                "size":10, 
                "colour":"#FFFFFF" 
                }, 
                "test1":"asd", 
                "test2":"zxc" 
                } 
                ] 
              } 
              ] 
            }, 
です

そして私は、テキスト値を解析し、オブジェクトにそれらを配置することができるようにしたいです。クラスを作成しましたが、正確な値を取得できません。私は、次の

NSArray *test = [MainJSON valueForKeyPath:@"products.screens.widgets.splits.texts"]; 

for(NSDictionary *dict in test){ 

    NSLog(@"%@", [dict valueForKeyPath:@"value"]); 
} 

それは値を出力しますが、同様ブラケットの負荷とをやって試してみましたが、私はJSONからの正確な値を取得できるようにする必要があります。私もやってみた

for(int i = 0; i < [test count]; i++){ 

    for(NSDictionary *dict in [test objectAtIndex:i]){ 

     NSLog(@"%@", [dict valueForKeyPath:@"value"]); 
    } 

} 

しかし同じ問題。誰でも私が間違っていることを教えてもらえますか?私は多くの異なる解決策を試みたが、何も動作していないようだ。私が与えた例えば事前

EDIT出力の

おかげであなたが深くイライラさせられるブラケットの多くを見ることができるように

2012-03-21 12:12:18.731 JSONObjects[4467:f803] (
    (
      (
        (
      "CURRENT BALANCE", 
      "[var:UnbilledAmount]" 
     ) 
    ), 
      (
        (
      "THE BILL IS DUE IN", 
      "[var:DaysToBill] DAYS" 
     ) 
    ), 
      (
        (
      TEXTS, 
      "[var:UsedTexts] of [var:MaxTexts]" 
     ), 
        (
      DATA, 
      "[var:UsedData] of [var:MaxData]" 
     ), 
        (
      TEXTS, 
      "[var:UsedMinutes] of [var:MaxMinutes]" 
     ) 
    ) 
) 
) 
2012-03-21 12:12:18.732 JSONObjects[4467:f803] (
     (
    ), 
     (
    ), 
     (
    ), 
     (
    ), 
     (
    ) 
) 
2012-03-21 12:12:18.732 JSONObjects[4467:f803] (
     (
    ) 
) 
2012-03-21 12:12:18.733 JSONObjects[4467:f803] (
     (
    ) 
) 
2012-03-21 12:12:18.733 JSONObjects[4467:f803] (
     (
    ) 
) 
2012-03-21 12:12:18.734 JSONObjects[4467:f803] (
     (
    ) 
) 
2012-03-21 12:12:18.734 JSONObjects[4467:f803] (
     (
    ) 
) 

です。

EDIT2は:

テストは、ここでは、NSDictionaryの配列ががオブジェクトであるコードにある

NSString *filePath = [[NSBundle mainBundle] pathForResource:@"json" ofType:@"json"]; 
NSData *myData = [NSData dataWithContentsOfFile:filePath]; 

NSString *responseString = [[NSString alloc] initWithData:myData encoding:NSUTF8StringEncoding]; 

NSDictionary *MainJSON = [responseString JSONValue]; 
NSArray *test = [MainJSON valueForKeyPath:@"products.screens.widgets.splits.texts"]; 

編集:私はこのコード

を使用して単一の値を取得することができた

for(NSDictionary *dict in [textArray objectAtIndex:0]){ 

NSLog(@"%@", [[[[dict valueForKey:@"value"]objectAtIndex:0]objectAtIndex:0]objectAtIndex:0]); 
} 

しかし、これはちょっと乱雑です。

+0

あなたの出力を質問に追加してください - あなたが期待する値の代わりに配列を出力しているので、 '大括弧も同様にロードされていると思われます: – deanWombourne

+0

'NSLog(@ %@ "、[[dict objectForKey:@" value "] class]);'オブジェクトが文字列かどうかを調べるには? – deanWombourne

+0

私が与えた例に出力を追加しました。また、あなたが私に与えたコードを試してみました。 " - [__ NSArrayI objectForKey:]:インスタンスに送られたセレクタが認識できませんでした。0x6a37310 " – AdamM

答えて

0

私は最後にそれを理解しました。 productsオブジェクトクラスでは、NSDictionaryオブジェクトをクラスオブジェクトに追加しませんでした。私は画面の辞書を作る必要があったので。次に、その辞書をループし、ウィジェットを見つけて、その配列の辞書を作成し、分割を見つけて、その配列の辞書を作ってから、それをループしてテキストが得られるまで繰り返します。今それは完璧に動作します! :D