【问题标题】:Why do you have to loop through JSON data in order to retrieve JSON Values?为什么必须遍历 JSON 数据才能检索 JSON 值?
【发布时间】:2018-06-04 08:42:37
【问题描述】:

有人告诉我,我必须遍历 JSON 数据的原因是因为 JSON 是一个数组。如果这是真的,我的问题是为什么你必须遍历 JSON 数据才能检索 JSON 值?如果这不是真的,还有另一种使用 jQuery 检索 JSON 数据的方法吗?我在标签词中添加了 jQuery,因为我想通过 jQuery 检索 JSON 数据。我的 JSON 数据如下:

    [  
       {  
          "input":0,
          "candidate":0,
          "delivery":"one",
          "last":"two",
          "point":"none",
          "fruit":{  
             "apples":"yes",
             "oranges":"no",
             "grapes":"yes",
          },
          "analysis":{  
             "code":"Y",
             "crr":"TTB",
          }
       }
    ]

【问题讨论】:

  • 您的数据是一个数组 - 要在数组中查找特定值,您必须循环并找到它们(或使用一些数组扩展方法,例如 find - 但在幕后只是循环)——这就是数组的工作方式。
  • JSON 是一些数据的字符串表示。该数据可能包含也可能不包含一个或多个数组。如果你被告知“JSON 是一个数组”,那么你就被误导了。
  • @Mariton 你走在正确的轨道上。您在上面分享的是 JSON 数组的示例(由方括号 [] 确定)。地图内的属性无需迭代即可访问(地图使用大括号{} 表示)。
  • @Mariton 我不是想嘲弄或侮辱,如果我给人这种印象,我深表歉意:我试图通过类比来解释你的问题有一个有缺陷的前提。为了进行比必要的更深入的研究,计算机将内存存储在物理内存地址中。将您的计算机内存视为一个邻域,并跳过几层间接,当您访问数组索引或对象属性/哈希表键时,计算机访问存储在与数组/对象相关的块中的内存(想想街道)索引/键的偏移量(想想地址)。所以如果你不知道确切的...

标签: javascript json


【解决方案1】:

JSON 代表 JavaScript 对象表示法。

在 JavaScript 中,对象是关联数组。关联数组将唯一键(可以是字符串,也可以是数字)映射到值。

普通数组实际上是关联数组的子集(它们只有*数字键)。每个(唯一)数字映射到一个值。

要从数组中获取所有数据,您需要向它询问每个键的值。这通常通过循环来完成。在关联数组的情况下,这意味着循环其键(无论它们可能是什么类型),并在数组中询问其值,如下所示:

for (var key in p) {
    if (p.hasOwnProperty(key)) {
        console.log(key + " -> " + p[key]);
    }
}

*在JS中并不完全正确,因为长度和其他一些东西实际上也是键,这也与为什么你必须询问键是否是它自己的属性有关。

【讨论】:

  • 1.数组和哈希图是完全不同的数据结构,即使在 JavaScript 中也是如此。一个不是另一个的子集。 2. 使用for..in 循环遍历数组会产生细微的错误,至少在过去 6 年中一直被认为是不好的做法。
  • @JaredSmith 我很清楚它们是不同的数据结构,但通常数组在 JS 中作为特殊版本的哈希图实现。有关几个示例,请参阅数组的 Mozilla Rhino 实现:[github.com/mozilla/rhino/blob/master/src/org/mozilla/javascript/…。第 2121 行的注释描述了整体策略,其中密集数组使用实际的底层数组,但其他任何内容都使用 HashTable 存储。 Spider Monkey at:[hg.mozilla.org/mozilla-central/file/tip/js/src/vm/… 采用了类似的方法。
  • @user602607 实现细节!== 语义。或者性能。或帮助正确。
  • @JaredSmith 恕我直言,虽然我显然错了,并且确实在思考如何创建正确的答案...我也觉得对话是健康的,并且是正确解决误解的唯一方法.我也会在工作环境中提出这些观点。谢谢你的时间,我现在就停下来。
猜你喜欢
  • 1970-01-01
  • 2017-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多