【问题标题】:Parsed JSON contains only the last element解析的 JSON 仅包含最后一个元素
【发布时间】:2013-09-24 09:45:56
【问题描述】:

在将 JSON 字符串转换为对象后的以下代码中,第二个控制台语句只给了我最后一个元素,第一个元素被忽略。为什么?如何获取第一个元素?

        var key_val_pair = keyvalues;  
        console.log(key_val_pair);  //{"4":"123","4":"456"}

        key_val_pair = JSON.parse(key_val_pair);
        console.log(key_val_pair); // {"4":"456"}
       for(var entry in key_val_pair)
       {
            console.log(entry); 
            console.log(key_val_pair[entry]); 
       }

【问题讨论】:

  • 您的 JSON 为键“4”提供了两个值,这是没有意义的。你期待什么?如果您想为同一个键提供多个值,则必须使用数组:{"4":["123", "456"]}
  • 您是说,您无法猜测为什么缺少第一个元素? ;)
  • 我冒昧地修正了一些术语。
  • @Juhana 好一个。这个标题更有意义:)

标签: javascript json


【解决方案1】:

对象中的每个键都是唯一的。因此,当您将对象(使用重复键 4)转换为对象时,必须删除其中一个值。

注意:您不会将字符串转换为 JSON。该字符串包含 JSON,您可以将其转换为 JavaScript 对象!

【讨论】:

    【解决方案2】:

    如果你有,你会期待什么

    var a;
    a = "123";
    a = "456";
    

    您希望同时拥有 123 和 456 吗?不,您希望只有 456,因为它会覆盖原始值 123。同样的事情发生在您的对象中,第二个“4”键会覆盖第一个值。

    如果您需要每个键有多个值,则它需要是一个数组。它应该是什么样子的

    { "4": ["123","456"] }
    

    【讨论】:

      【解决方案3】:
      var myArray = [];
      myArray[0] = 1;
      console.log(myArray[0]);
      myArray[0] = 2;
      console.log(myArray[0]);
      

      您希望第二个console.log 打印什么?显然,2,对吧?因为,我们写入同一个索引。

      同样,在 JSON 数据中,456 被写入之前存储123 的相同位置。这就是为什么缺少第一个元素。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-10-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-27
        相关资源
        最近更新 更多