如何将对象数组转换为字符串?

11
我创建了一个对象数组,需要存储并保留到另一个页面。
这个对象数组类似于这样:
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]

那么如何将这个数组中的对象转换为字符串呢?

编辑: 然后将这个对象数组传递给类似于以下的点击函数:

$("#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相同。

Session Storage


编辑3: @Rayon要求一个fiddle以便查看,我制作了一个并且它已经运行。问题是 - 我现在感觉如此愚蠢 - 我调用了数组而不是我制作的字符串化变量。


6
“JSON.stringify(cheese_array)”确实会将整个内容转换为字符串;您是如何确定它没有这样做的? - Jacob
这不是一个有效的 数组 - Rayon
1
这里有一些有用的例子:https://dev59.com/5Ww15IYBdhLWcg3wntOh - Ugo T.
您能告诉我们您是如何运行此代码的吗?例如在Chrome控制台或节点中。您显示的内容类似于Chrome和Firefox在控制台中输入变量后显示的方式。这是我在Chrome控制台上输入变量名称并按回车键时得到的结果:[>Object, >Object, >Object] 在Chrome中,大于号实际上是三角形按钮。 - Philip Tinney
@PhilipT。是的,我正在使用Chrome浏览器。我正在查看会话存储键,这是在字符串化后被推送到其中的数组。我将通知并展示执行字符串化和推送到会话存储的函数。编辑:此外,对象不会显示为三角形,我知道你的意思,但是会话存储只能存储字符串,我将添加会话存储键的图像。 - sparcut
4个回答

9
您的对象如下所示缺少逗号:
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]的。我猜测你在控制台记录了其他内容,请检查你的代码。


抱歉,我错过了。这就是我一直在做的事情,但似乎只是将数组字符串化,而不是其中的对象。 - sparcut
逗号不是问题。移除它并尝试。这将抛出“语法错误”。 - Rayon
@Cyril - 还要注意,你的json缺少了... 不,它是一个object,不是JSON - Rayon
3
@Rayon谢谢更新,我很感激你的辛勤工作,说服这么多已经给出了实际相同答案的人 :)。 - Cyril Cherian
1
@Rayon 我感觉好蠢啊。我写了一个 fiddle,结果它居然能用。然后我就盯着我的代码看了几分钟。原来我一直在调用数组而不是字符串化的变量。很抱歉浪费了你的时间。:( - sparcut
显示剩余7条评论

4

使用 ,(逗号) 更新 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>


1
您的第三个对象中缺少一个逗号,在年龄后面:

您在代码中缺少了一个,

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);

这将现在起作用并正确显示。

第三个对象中的年龄后面缺少了“逗号”,这就是语法错误,这也是为什么它没有工作的原因,你可以看到其他人最终提供了相同的答案。 - Wesley Coetzee
1
OP声称他得到了[object Object],[object Object],[object Object]作为输出结果。是逗号导致了这种情况吗? - Rayon
如果您删除逗号,使第三个对象变为“age:“13””,这将是语法错误。在我发布此代码之前,我已经测试过它,这就是我发现错误的原因。我认为您误解了问题。请查看OP的代码,或者运行它,您会看到的 :) - Wesley Coetzee
1
在我看来,应该根据 OP 面临的情况提供解决方案。OP 从未说过他遇到了错误。他说的是输出结果是 object object。你提供的解决方案并没有帮助到这个问题。这个问题完全符合“无法再现的问题或简单的排版错误”的定义。 - Rayon
@Rayon +WesleyCoetzee 抱歉,我匆忙写下了那个数组。我正在处理的原始对象数组太大了,无法复制粘贴,但所有逗号都在应该的位置。没有收到任何语法错误,并且在使用它处理该文档时它可以正常工作。但是当将其转换为字符串并存储到会话中时,问题就出现了。我正在使用Chrome进行测试。我现在正在使用手机上网,但回到家后,我会再次检查该函数。 - sparcut
显示剩余3条评论

-3
我通过调用函数成功解决了这个问题。

JSON.stringify(JSON.stringify(objToStringify))


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接