如何在JavaScript解析JSON时维持顺序?

15
我发送到页面的数据是以JSON编码的,使用Javascript进行解析,然后使用循环在HTML SELECT元素中显示。数据在到达时已经排序,但我遇到了保持正确顺序的问题,在解码JSON字符串时会导致数据的排序失效。
示例数据:{"test":{"4":"first","5":"second","3":"third"}} 使用jQuery的JSON解析器和Javascript的eval()函数,我得到以下结果:{"test":{"3":"third","4":"first","5":"second"}}
不可能修改数据格式和键("4",“5”,“3”)的顺序必须保持不变。实际数据要复杂得多,但这个示例很好地说明了我的问题。
如何在从Javascript解析JSON数据时保持JSON数据的顺序?

2
当您使用属性(对象字面量)时,不应依赖顺序。只有数组(无论是在JavaScript中还是JSON中)保留顺序。 - Tomasz Nurkiewicz
让我烦恼的是,http://json.parser.online.fr/ 上的自定义JSON解析器工作得很好。不幸的是,我无法修改数据格式,否则我将使用数组。:( - Signal
1
你应该向制作这个数据的人投诉,因为他们在设计JSON表示时做得非常糟糕。如果顺序很重要,就不应该使用对象。 - Phrogz
@Phrogz 已经完成了,但这不会有太大的改变。我得改变大约35%的应用程序才能解决这个问题。我可能会决定忍受它,然后进行额外的排序。与我在这段代码中看到的其他暴行相比,这算不了什么。 - Signal
1个回答

11

如果您想保留顺序,请使用数组。这应该是在 JavaScript 中维护顺序的唯一方法。


1
很遗憾,无法修改数据格式。 :( - Signal
2
@Wolf 那么你需要手动解析它,除了存储属性顺序的数据之外,还需要保留一个数组。JavaScript 无法保证对象属性的迭代顺序。 - Phrogz
@Phrogz 我本来希望有现成的解决方案,但我想只能自己动手了。我会给这个问题一些时间,也许会有人想出什么办法。 - Signal
@Wolf 我怀疑对于一个JSON解析器来说,将键值对在数组中按顺序记录下来应该是一个相当简单的修改。(也许就在这一行附近。) - Phrogz
遗憾的是,这确实是维护秩序的唯一方法。我要么需要修改数据以使用数组,要么在Javascript代码中实现排序功能。 - Signal
3
这并不是一个答案。严格来说,JSON对象是无序的,但很多人希望保留它们当前的顺序。 - Steve Bennett

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