【问题标题】:Use a JSON array with objects with javascript使用带有 javascript 的对象使用 JSON 数组
【发布时间】:2010-05-09 21:36:08
【问题描述】:

我有一个函数可以获取带有对象的 JSON 数组。在函数中,我将能够遍历数组、访问属性并使用该属性。像这样:

我将传递给函数的变量如下所示:

[{
  "id": 28,
  "Title": "Sweden"
}, {
  "id": 56,
  "Title": "USA"
}, {
  "id": 89,
  "Title": "England"
}]

function test(myJSON) {
  // maybe parse my the JSON variable?
  // and then I want to loop through it and access my IDs and my titles
}

有什么建议可以解决吗?

【问题讨论】:

  • 问题不清楚。提供更准确和描述性的代码。

标签: javascript json


【解决方案1】:

这不是单个 JSON 对象。您有一个 JSON 对象数组。您需要先遍历数组,然后访问每个对象。也许以下启动示例会有所帮助:

var arrayOfObjects = [{
  "id": 28,
  "Title": "Sweden"
}, {
  "id": 56,
  "Title": "USA"
}, {
  "id": 89,
  "Title": "England"
}];

for (var i = 0; i < arrayOfObjects.length; i++) {
  var object = arrayOfObjects[i];
  for (var property in object) {
    alert('item ' + i + ': ' + property + '=' + object[property]);
  }
  // If property names are known beforehand, you can also just do e.g.
  // alert(object.id + ',' + object.Title);
}

如果 JSON 对象数组实际上是作为普通字符串传入的,那么这里确实需要eval()

var string = '[{"id":28,"Title":"Sweden"}, {"id":56,"Title":"USA"}, {"id":89,"Title":"England"}]';
var arrayOfObjects = eval(string);
// ...

要了解有关 JSON 的更多信息,请查看MDN web docs: Working with JSON

【讨论】:

  • 记得if (object.hasOwnProperty(...
  • +1 用于 eval() 更新,浪费了这么多时间没有意识到我需要将字符串转换为对象。
  • @PeadarDoyle:不客气。请确保此字符串不包含用户控制的数据,否则您可能会面临 JS 代码注入的风险。但更好的是从一开始就传递一个完全有价值的 JS 对象。 IE。删除字符串周围的引号 - 如果有的话。
  • +1 胸罩。我正在寻找一种方法来让 Ajax 响应字符串引导多选。这个 var arrayOfObjects = eval(string);成功了
【解决方案2】:

这是你的dataArray

[
   {
      "id":28,
      "Title":"Sweden"
   },
   {
      "id":56,
      "Title":"USA"
   },
   {
      "id":89,
      "Title":"England"
   }
]

那么parseJson就可以使用了:

$(jQuery.parseJSON(JSON.stringify(dataArray))).each(function() {  
    var ID = this.id;
    var TITLE = this.Title;
});

【讨论】:

    【解决方案3】:

    “包含对象的 JSON 数组”我猜你的意思是包含 JSON 的字符串?

    如果是这样,您可以使用安全的var myArray = JSON.parse(myJSON) 方法(本机或包含使用JSON2),或usafe var myArray = eval("(" + myJSON + ")")。 eval 通常应该避免,但如果您确定内容是安全的,那么就没有问题。

    之后,您只需照常遍历数组即可。

    for (var i = 0; i < myArray.length; i++) {
        alert(myArray[i].Title);
    }
    

    【讨论】:

      【解决方案4】:

      您的问题感觉有点不完整,但我认为您正在寻找的是一种让您的 JSON 可以访问您的代码的方法:

      如果你有上面的 JSON 字符串,那么你只需要这样做

      var jsonObj = eval('[{"id":28,"Title":"Sweden"}, {"id":56,"Title":"USA"}, {"id":89,"Title":"England"}]');
      

      然后您可以使用 jsonObj[0].id 等访问这些变量

      如果这不是你的意思,请告诉我,我会尽力提供帮助。

      M

      【讨论】:

      【解决方案5】:

      @Swapnil Godambe 如果 JSON.stringfy 被删除,它对我有用。 那就是:

      $(jQuery.parseJSON(dataArray)).each(function() {  
          var ID = this.id;
          var TITLE = this.Title;
      });
      

      【讨论】:

        【解决方案6】:

        var datas = [{"id":28,"Title":"Sweden"}, {"id":56,"Title":"USA"}, {"id":89,"Title":"England"}];
        document.writeln("<table border = '1' width = 100 >");
        document.writeln("<tr><td>No Id</td><td>Title</td></tr>"); 
        for(var i=0;i<datas.length;i++){
        document.writeln("<tr><td>"+datas[i].id+"</td><td>"+datas[i].Title+"</td></tr>");
        }
        document.writeln("</table>");

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2020-07-02
          • 2016-07-08
          • 1970-01-01
          • 2016-01-21
          • 2019-09-27
          • 2013-06-07
          • 1970-01-01
          相关资源
          最近更新 更多