【问题标题】:How do I stringify an array of objects?如何对对象数组进行字符串化?
【发布时间】:2016-11-10 14:25:55
【问题描述】:

我创建了一个对象数组,需要为另一个页面存储和保留。

对象数组类似这样:

var cheese_array = [
  {
    name: "Chedder",
    age: "34",
    smelly: true
  },
  {
    name: "Brie",
    age: "4",
    smelly: false
  },
  {
    name: "Blue Stilton",
    age: "13",
    smelly: true
  }
 ];

但是当我JSON.stringify() 它时,它不会对对象进行字符串化,只会对数组进行字符串化。所以我最终得到了一个看起来像这样的数组:

[object Object], [object Object], [object Object]

那么你如何在这个数组中对这些对象进行字符串化。


编辑: 然后将此对象数组传递给类似于以下内容的 on click 函数:

$("#a-button").click(function() {
  var cheese_arr_stringify = JSON.stringify(cheese_array);
  sessionStorage.cheeseArray = cheese_arr_stringify;
  if(sessionStorage.cheeseArray) {
    window.location.href = "../";
  }
 });

差不多,它将cheese_arr_stringify 设置为对象数组的字符串化版本。然后它将这个字符串化代码设置为会话密钥。在此之后,一旦设置了 cheeseArray,它就会将其发送到一个目录。


编辑 2: 这是字符串化后的会话密钥的图像。在这种情况下,foodItems 与 cheeseArray 相同


编辑 3: @Rayon 要了一个小提琴,所以他可以看看,我做了它并且它起作用了。问题是——我现在觉得很愚蠢——我调用的是数组而不是我创建的字符串化 var。

【问题讨论】:

  • JSON.stringify(cheese_array) 确实会将整个事情串起来;你怎么确定它不是?
  • 这不是一个有效的array
  • 这里有一些有用的例子:stackoverflow.com/questions/6487699/…
  • 您能告诉我们您是如何运行此代码的吗?例如在 Chrome 控制台或 Node.js 中。如果您在控制台中输入,您所显示的显示类似于 Chrome 和 Firefox 显示变量的方式。这是我在输入变量名称并在 chrome 控制台上按 Enter 时得到的。 [>Object, >Object, >Object] 大于号实际上是 Chrome 中的三角形按钮。
  • @PhilipT。是的,我正在使用铬。我正在查看会话存储键,这是字符串化数组在被字符串化后被推送的位置。我将通知并向您展示执行字符串化并推送到会话存储的函数。 编辑:另外,对象不是用三角形显示的,我知道你的意思,但是会话存储只能存储字符串,我将添加会话存储键的图像。

标签: javascript jquery arrays json object


【解决方案1】:

您的对象缺少一个逗号,如下所示:

name: "Blue Stilton",
    age: "13"//comma is missing here
    smelly: true

JSON.stringify 工作正常,如下所示。

var cheese_array = [
  {
    name: "Chedder",
    age: "34",
    smelly: true
  },
  {
    name: "Brie",
    age: "4",
    smelly: false
  },
  {
    name: "Blue Stilton",
    age: "13",
    smelly: true
  }
 ];
console.log(JSON.stringify(cheese_array))

但是我不确定你如何获得日志 [object Object]、[object Object]、[object Object] 我假设您正在控制台记录其他内容,请在您的代码中检查。

【讨论】:

  • 糟糕,抱歉错过了。这就是我一直在做的事情,但它似乎只是对数组进行字符串化,而不是对里面的对象进行字符串化。
  • Comma 不是问题..删除它并尝试..这将抛出Syntax Error
  • @Rayon 去掉什么逗号?如果删除逗号,则它不是有效的数组。显然在这种情况下它是一个语法错误。
  • @Rayon 感谢更新,感谢您为说服这么多回答几乎相同问题的人所做的辛勤工作:)。
  • @Rayon 我觉得很愚蠢。我做了一个小提琴,很惊讶它能奏效。盯着我的代码看了几分钟。我一直在调用数组而不是字符串化的 var。很抱歉浪费您的时间。 :(
【解决方案2】:

用 ,(逗号) 更新 JSON

 name: "Blue Stilton",
    age: "13",
    smelly: true

var cheese_array = [
  {
    name: "Chedder",
    age: "34",
    smelly: true
  },
  {
    name: "Brie",
    age: "4",
    smelly: false
  },
  {
    name: "Blue Stilton",
    age: "13",
    smelly: true
  }
 ];

var details = JSON.stringify(cheese_array);
alert(details);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

【讨论】:

    【解决方案3】:

    在年龄之后,您的第三个对象中缺少,

    var cheese_array = [
      {
        name: "Chedder",
        age: "34",
        smelly: true
      },
      {
        name: "Brie",
        age: "4",
        smelly: false
      },
      {
        name: "Blue Stilton",
        age: "13",
        smelly: true
      }
     ];
    
    var jsonObj = JSON.stringify(cheese_array);
    

    现在可以正常工作和显示了。

    【讨论】:

    • Comma 不是问题..删除它并尝试..这将抛出syntaxError
    • 第三个对象中的“逗号”在年龄后丢失,这是语法错误,这就是它不起作用的原因,您可以看到其他人最终提供了相同的答案。
    • OP 声称[object Object], [object Object], [object Object] 是他得到的输出。comma 是否实现了这一点?
    • 如果你去掉逗号,那么第三个对象就会变成 'age: "13"' 这是一个语法错误。在将代码发布到此处之前,我已经对其进行了测试,这就是我发现错误的方式。我认为你误解了这个问题。请查看 OPs 代码并运行它,你会看到 :)
    • IMO,考虑到 OP 所面临的情况,应该提供一种解决方案。OP 从来没有说过他有错误。他说的是他把 [object object] 作为输出......你的解决方案对这个原因没有帮助..这个问题非常适合无法再重现的问题或简单的印刷错误。
    【解决方案4】:

    我可以通过调用来解决这个问题

    JSON.stringify(JSON.stringify(objToStringify))

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-12
      • 2012-07-17
      • 1970-01-01
      • 2015-01-14
      相关资源
      最近更新 更多