1

JSONデータをDOMにロードするための小さなajax呼び出しがありますが、機能していません。ネットタブを見ると、読み込まれているのに実際のページにデータがありません。[オブジェクト オブジェクト] と表示されているだけです。

   $.getJSON('json/redstone.json', function(data) {
   var items = [];

   $.each(data, function(key, val) {
       items.push('<li id="' + key + '">' + val + '</li>');
   });

   $('<ul/>', {
      'class': 'my-new-list',
       html: items.join('')
      }).appendTo('body');
   });

これが私のJSONです

{
"allconfig": {
    "card.inserted": {
        "value": "Not Inserted",
            "type": "enum",
            "range": "",
            "clone": false,
            "archive": false,
            "access": "R"
    },
        "card.cisproc": {
        "value": "Processed",
            "type": "string",
            "range": "",
            "clone": false,
            "archive": false,
            "access": "R"
    },
        "card.mfgid": {
        "value": "",
            "type": "string",
            "range": "",
            "clone": false,
            "archive": false,
            "access": "R"
    }
}
}
4

2 に答える 2

2

val実際には、JSON データ内のオブジェクトです。そして、$.each以上を行うdataと、要素のみが取得されallconfigます。そのため、代わりに列挙することをお勧めしますdata.allconfig

valしたがって、次のように、代わりにのvalueプロパティを表示したい場合があります。

$.getJSON('json/redstone.json', function(data) {
var items = [];

$.each(data.allconfig, function(key, val) {
    items.push('<li id="' + key + '">' + val.value + '</li>');
});

$('<ul/>', {
   'class': 'my-new-list',
    html: items.join('')
   }).appendTo('body');
});

ここに動作するjsFiddleがあります

于 2012-11-26T20:32:02.523 に答える
0

試すことができる別の方法は、次のように、通常の JavaScript 反復を使用して JSON オブジェクトを反復することです。

for(var key in data){
    var value = data[key];
    items.push('<li id="' + key + '">' + value + '</li>');
}

編集:誰かがコメントで指摘したように、サブオブジェクトまたはネストされたオブジェクトがあることに気付きました。私の方法自体は、キーと値のペアの最初のレベルでのみ機能します。反復関数をもう少し一般的なものにしたい場合は、次のように、再帰を使用して構造を適切に掘り下げることができます。

function buildData(data){
    for(var key in data){
        var value = data[key];
        if(typeof(value) == "object"){
          nestedData = buildData(value);
          items.push('<li id="' + key + '">' + nested + '</li>');
          // I'm not sure how you want to handle your nested objects, so place
          // here what you need and whatever else you need to do to handle
          // your nested object situation.
        }else{
            items.push('<li id="' + key + '">' + value + '</li>');
        }
    }
}
于 2012-11-26T20:35:47.790 に答える