【问题标题】:How can I iterate through a returned JSON string using Javascript?如何使用 Javascript 遍历返回的 JSON 字符串?
【发布时间】:2019-03-27 19:41:50
【问题描述】:

我有一个 API 端点,它以以下格式返回一些数据。

{
  "key1": "value1",
  "key2": "value2",
  "key3": "value3",
}

我认为能够遍历此 JSON 有效负载中的每个键值对会相对简单,但我似乎遇到了错误。下面的代码是我用来首先将 JSON 从字符串格式解析为变量,然后我想遍历 JSON 对象中的每个键,检索键和值,然后对这两个值执行一些操作.

var dictionary = JSON.parse(data);

for (var key in dictionary) {
    var identifier = key;
    var identifierValue = dictionary[key];

    //do stuff..

我不确定 for() 在这种情况下是否有效,我如何准确地遍历 JSON 对象中的每个键值对?

我的问题是我似乎无法访问字典变量中保存的键或值。似乎 for 循环不起作用,这让我觉得它对这个用例无效。如果这是 C#,我将不得不做类似于

的事情
for(var key in dictionary.keySet)
{
    //do...
}

我正在寻找 JS 中的等价物。

【问题讨论】:

  • 假设这是一个对象(尽管从您在问题中发布数据的格式尚不清楚),您可以使用几种方法来遍历其属性:stackoverflow.com/questions/8312459/…。如果您可以编辑问题以显示更准确的响应数据示例,我们可以为您提供更准确的答案。
  • 错误是什么?提供minimal reproducible example
  • 我更喜欢 Object.entries().forEach() 而不是 for ... in 或其兄弟姐妹之一 Object.keys()Object.values()。它允许您假装对象是一个数组,而无需手动映射dictionary[key]
  • 请添加更多信息。控制台中记录了哪些错误(如果有)?数据变量是什么类型?如果是对象,JSON.parse 会抛出 SyntaxError。

标签: javascript jquery json


【解决方案1】:

您发布的代码看起来不错,但是还有其他方法可以迭代对象:

Object.keys(jsonObject)
  .forEach(function eachKey(key) { 
    alert(key); // alerts key 
    alert(jsonObject[key]); // alerts value
  });
【解决方案2】:

您自己的代码似乎没问题。不知道为什么它会从显示的代码中引发错误。

我评论的 Object.entries() 示例如下:

const data_json = '{"key1":"value1","key2":"value2","key3": "value3"}';
const dictionary = JSON.parse( data_json );
Object.entries( dictionary ).forEach(([ key, value ]) => {
  console.log( `found key ${ key } with value ${ value }` );
});

【讨论】:

    【解决方案3】:

    您似乎想知道其他一些方法。可以有其他方法

    Object.entriesforEach()

    let obj = {
      "key1": "value1",
      "key2": "value2",
      "key3": "value3"
    }
    
    Object.entries(obj).forEach(([key, value]) => {
      console.log(key);
      console.log(value)
    })

    Object.keysforEach()

    let obj = {
      "key1": "value1",
      "key2": "value2",
      "key3": "value3"
    }
    
    Object.keys(obj).forEach(key => {
      console.log(key);
      console.log(obj[key])
    })

    【讨论】:

      【解决方案4】:

      如果您的 API 数据被引号包围,那么您需要在运行迭代器之前使用 JSON.parse

      var data = '{"key1": "BMW", "key2": "Volvo", "key3": "Saab", "key4": "Ford"}';
      
      var cars = JSON.parse(data);
      
      Object.keys(cars).forEach(function(key) {
          console.log(key + "=" + cars[key]);
      });
      

      如果数据是普通对象,则无需使用JSON.parse

      var cars = {"key1": "BMW", "key2": "Volvo", "key3": "Saab", "key4": "Ford"};
      
      Object.keys(cars).forEach(function(key) {
          console.log(key + "=" + cars[key]);
      });
      

      【讨论】:

        【解决方案5】:

        你的方法很好。 您迭代字典,它会将密钥存储在var key 中。

        要访问这个迭代数组的值,你只需用键访问数组。

        for (var key in dictionary) {
            if (dictionary.hasOwnProperty(key)) {
                 var value = dictionary[key]
                 console.log(key + '=>' + value);
            }
        }
        

        【讨论】:

          猜你喜欢
          • 2018-11-19
          • 2010-11-17
          • 2011-08-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-09-12
          • 1970-01-01
          相关资源
          最近更新 更多