【问题标题】:(javascript) JSON.parse() changes content of json(javascript) JSON.parse() 改变 json 的内容
【发布时间】:2020-08-18 16:27:28
【问题描述】:

我正在为一款游戏制作一个练习工具,它可以帮助您学习如何用钢琴演奏歌曲,而我想要做的是让所有在 50 毫秒内按下的音符相互显示为“你必须把它们压在一起” 现在,这似乎正在工作,但是当我将歌曲的字符串传递给解析器时,它会改变数组的内容。我已经使用完全相同的方法来解析其他函数中的对象并且它按预期工作,这里不是,这是未解析数组的(部分)

[{"time":2937,"key":"Key2"},
{"time":2943,"key":"Key7"},
{"time":2949,"key":"Key0"},
{"time":4297,"key":"Key6"},
{"time":4306,"key":"Key11"},
{"time":4315,"key":"Key2"},
{"time":5547,"key":"Key5"},
{"time":5549,"key":"Key2"},
{"time":5554,"key":"Key7"},
{"time":7480,"key":"Key8"},
{"time":7814,"key":"Key9"},

这是解析后的

0: {time: 2943, key: "Key7"}
1: {time: 4297, key: "Key6"}
2: {time: 4306, key: "Key11"}
3: {time: 4315, key: "Key2"}
4: {time: 5547, key: "Key5"}
5: {time: 5549, key: "Key2"}
6: {time: 5554, key: "Key7"}
7: {time: 7480, key: "Key8"}
8: {time: 7814, key: "Key9"}
9: {time: 8158, key: "Key5"}
10: {time: 8166, key: "Key10"}

为什么会发生这种情况,我该如何解决? 代码是乱七八糟的:

console.log(song)
trainingSong = JSON.parse(song)
console.log(trainingSong)

【问题讨论】:

  • 代码 sn-p 有问题 - JSON.parse() 需要一个字符串,而您将它传递给一个数组。在将歌曲传递给 JSON.parse() 之前,您可以在歌曲上调用 JSON.stringify()
  • 第一个是字符串而不是数组,它是用于保存歌曲音符的 div 的 innerHTML
  • JSON.parse 不会重新排序数组。必须有别的东西。您需要提供minimal reproducible example

标签: javascript html arrays json parsing


【解决方案1】:

使用JSON.stringify 对代码进行字符串化,然后使用JSON.parse 对其进行解析。

console.log(
  JSON.stringify([
    { time: 2937, key: "Key2" },
    { time: 2943, key: "Key7" },
    { time: 2949, key: "Key0" },
    { time: 4297, key: "Key6" },
    { time: 4306, key: "Key11" },
    { time: 4315, key: "Key2" },
    { time: 5547, key: "Key5" },
    { time: 5549, key: "Key2" },
    { time: 5554, key: "Key7" },
    { time: 7480, key: "Key8" },
    { time: 7814, key: "Key9" },
  ])
);

【讨论】:

  • 我试过这个:console.log(JSON.parse(JSON.stringify(song))) console.log(typeof(JSON.parse(JSON.stringify(song)))) 和结果与未解析且类型为字符串相同
  • @Specy 您必须先对其进行字符串化,因为正如 Omer 在评论中所说的那样,您有一个数组。一旦你这样做,这应该工作:)
  • 我认为您错过了问题的重点(确实没有表达清楚,我还以为是console.log最初表达数据的方式不同)。输入和输出具有不同顺序的数组中的对象。
  • @Quentin 哦,是的,我现在看到了,但问题是关于解析 JSON,不是吗?我猜 OP 有不同订单的算法
  • @Quentin 看这里pastebin.com/7N8bxpX7 数组是有序的(你可以看到时间在增长)但是键错误并且时间与未解析的数组不同。如果不够清楚,我将删除此帖子并再发一个
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多