2011-10-19 19 views
0

私はいくつかのaproachesを使いこなしていますが、成功しませんでした.JQueryを使用する前にJSONデータを正常に解析しましたが、今は分かりません。このコードではJQueryでネストされたJSON項目にアクセスする

$.each(data, function(headers, item){ 
    $.each(item, function(){ 
     console.log(item[i].date_c); 
     i++; 
    }); 
}); 

私は簡単にこのようなJSONオブジェクトのすべての日付を読み取ることができます。

enter image description here

しかし、今、私はあることに到達する方法がわかりませんこのようなJSONオブジェクトの日付: enter image description here

ご覧のとおり、新しいレベルがあります。私を助けてくれますか?

ありがとうございます!

---------------- EDIT 私を助けてくれてありがとうございます。 JSONは非常に大きいですが、ここから見ることができます:http://vader.rice.edu/hed2/wormsr/data.php?kw=him-5

523はIDであり、すべての項目が異なっています。たとえば、1つのIDに対応する4つの異なる日付があります。

+0

'$ .each(item、function(){'、 'items'はどこですか??(s) –

+0

jsonを貼り付けることはできますか? –

+0

新しいJSONのデータ構造についてもう少し詳しくお聞かせください。 523は定数です、日付は常にオブジェクト3にありますか...この情報なしで反復する方法を推測するのは少し難しいです。 – topek

答えて

1

通常、JSONオブジェクト内のほとんどのデータは便利であり、フォーマットは安定しています。可能であれば、私は別のスクリプトを書くのではなく、それを訂正します。

  • アイテムの要素はどこに行きましたか?
  • データ 'date_c'を保持するオブジェクトが突然ネストされているのはなぜですか?

構文については:あなたはを自由に使用することが

オペレータまたはオブジェクトの配列アクセス表記([])は、データを見ることができるように

だからあなたは

//first structure 
    data['items'][0]['date_c'] 
//second structure 
    data[0][523][3]['date_c'] 

のようなものを書くことができますが、単純に深くネストされたので、解決策は、別のものを追加することですeachだから、もう一度レベルを反復することができます。

// 0 in our example 
$.each(jsonData, function(index, firstLevel) { 
    //523 in the example 
    $.each(firstLevel, function(anotherindex, secondLevel) { 
     // 3 in the example 
     $.each(secondLevel, function(yetAnotherIndex, thirdLevel) { 
      console.log(thridLevel['date_c']); 
     }); 
    }); 
}); 

関数に渡さ偶然に(xxxLevelが)あなたのJSON形式のオブジェクトであることに注意してください。

+0

ありがとうございます!私はとても盲目だった。これは非常にうまくいった。 – Multitut

+0

は、レベル数がわかっている場合にのみ機能します。それはあまり柔軟ではありません。 –

+0

データを交換する場合は、柔軟なパーサーは必要ありませんが、安全なフォーマットが必要です。 – FloydThreepwood

1

あなたはどこに日付が表示されるのか分かりませんか?例えば問題が単に "date_c"という名前のコンストラクト内のすべてのメンバーオブジェクトを取得するだけの場合は、再帰を使用します。

これはテストされていませんが、基本的なロジックが有効です。オブジェクトのプロパティまたは配列の要素を繰り返して、 'date_c'という名前のプロパティを探します。子を持つ可能性のある任意のプロパティまたは配列要素を再帰的に処理してみてください。

var findThem = function(data) { 
    var result=null; 
    // skip literals, they have no children 
    if (typeof data === 'string' || typeof data === 'number') { 
     return; 
    } 
    if (data && data.constructor && data.constructor.name ==='Array') { 
     for(var i=data.length-1;i>=0;i--) { 
      findThem(data[i]); 
     } 
    } else if (typeof data === 'object') { 
     foreach (var prop in data) { 
      if (data.hasOwnProperty(prop)) { 
       if (prop=='date_c') { 
        console.log(data[prop]); 
       } else { 
        findThem(data[prop]); 
       } 
      } 
     } 
    } 
} 
関連する問題