【问题标题】:Why does JSON.stringify() not work on this array?为什么 JSON.stringify() 不能在这个数组上工作?
【发布时间】:2018-04-06 06:49:21
【问题描述】:

我有一个这样声明的数组:

array = [];

并且具有如下所示的值 -

....
ChIJOaegwbTHwoARg7zN_9nq5Uc:"ChIJOaegwbTHwoARg7zN_9nq5Uc"
ChIJXTwCdefHwoAR9Jr4-le12q4:"ChIJXTwCdefHwoAR9Jr4-le12q4"
....

这些值在我执行 console.log(array); 时打印出来

当我尝试执行 JSON.stringify(array) 时,它似乎不起作用。我想使用 localStorage.setItem() 将此数组存储在 localStorage 中。

我在浏览器控制台中尝试了这样的示例:

var arr=[]
arr[0] = 1
arr[1] = 2
JSON.stringify(arr);

上面的例子工作得很好。

请提供您的意见,我已经坚持了好几个小时了。

【问题讨论】:

  • 请添加您遇到错误的json
  • 第一步:了解数组和对象的区别。 JavaScript 中没有关联数组之类的东西。您向数组添加了任意自定义属性,但这些不是数组的 元素,因此它们不会被 JSON.stringify 序列化。
  • 对象和数组都是关联的,只是它们的键被允许分别只能或可转换为字符串和数字。

标签: javascript arrays json


【解决方案1】:

您正在尝试在数组中分配值,例如 objects ; index 只能是 o,1,2 等,而不是您使用过的字符串。如果必须这样做,请创建一个对象数组

【讨论】:

    【解决方案2】:

    问题是您试图将数组索引设置为字符串'ChIJOaegwbTHwoARg7zN_9nq5Uc''ChIJXTwCdefHwoAR9Jr4-le12q4',虽然浏览器似乎在控制台中打印它,但数组只考虑 整数键作为有效索引,因此如果您尝试打印array.length,它将打印0,因此JSON.stringify(array) 等操作不会返回任何内容

    var array = [];
    array['ChIJOaegwbTHwoARg7zN_9nq5Uc'] = "ChIJOaegwbTHwoARg7zN_9nq5Uc";
    array['ChIJXTwCdefHwoAR9Jr4-le12q4'] = "ChIJXTwCdefHwoAR9Jr4-le12q4";
    console.log(array);
    console.log(array.length)

    你需要的不是数组而是对象

    var obj = {};
    obj['ChIJOaegwbTHwoARg7zN_9nq5Uc'] = "ChIJOaegwbTHwoARg7zN_9nq5Uc";
    obj['ChIJXTwCdefHwoAR9Jr4-le12q4'] = "ChIJXTwCdefHwoAR9Jr4-le12q4";
    console.log(obj);
    console.log(JSON.stringify(obj))

    【讨论】:

      【解决方案3】:

      这不是一个数组,而是一个对象。对象不像数组那样字符串化。

      基本上:

      String = 'This is a string'
      
      Array = [
        'This is a string',
        'And so is this'
      ]
      
      Object = {
        firstString  : 'This is a string',
        secondString : 'And so is this.'
      }
      

      【讨论】:

      • 两者都可以,但前提是它们的内容是字符串化的。
      【解决方案4】:

      这在a plunker 中对我有用。

      let array = [];
      array.push({"ChIJOaegwbTHwoARg7zN_9nq5Uc":"ChIJOaegwbTHwoARg7zN_9nq5Uc"});
      array.push({"ChIJXTwCdefHwoAR9Jr4-le12q4":"ChIJXTwCdefHwoAR9Jr4-le12q4"});
      console.log(JSON.stringify(array));
      

      如果您执行console.log(array),您应该会看到如下内容:

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-08-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多