有一些(hacky)方法可以做到这一点......但你不应该这样做。
在 JSON 中,对象的定义如下:
对象是一组无序的名称/值对。
See http://json.org http://json.org.
大多数 JSON 实现都没有努力保留对象的名称/值对的顺序,因为它(根据定义)并不重要。
如果你想保留顺序,你需要重新定义你的数据结构;例如
{
"items":
[
[
{"WR":"qwe"},
{"QU":"asd"},
{"QA":"end"},
{"WO":"hasd"},
{"NO":"qwer"}
],
]
}
或者更简单地说:
{
"items":
[
{"WR":"qwe"},
{"QU":"asd"},
{"QA":"end"},
{"WO":"hasd"},
{"NO":"qwer"}
]
}
FOLLOWUP
感谢您提供的信息,但我别无选择,只能在我的应用程序中使用 JSON,并且无论 JSON 对象的定义如何,我的应用程序都需要保持键的顺序...我不允许更改 JSON 文件的格式还有...
您需要与设计该文件结构的人进行艰苦的对话,并且不会让您更改它。这是/他们完全错误的。你need说服他们。
If they really不会让你改变它:
- 你应该坚持not称其为 JSON...因为它不是。
- 您应该指出,您将必须专门编写/修改代码来处理这种“非 JSON”格式......除非您能找到一些保留顺序的 JSON 实现。如果他们是付费客户,请确保他们为您必须做的额外工作付费。
- 您应该指出,如果“非 JSON”需要由其他工具使用,则会出现问题。确实,这个问题会反复出现……
这种事情实在是太糟糕了。一方面,您的软件将违反旨在促进互操作性的完善/长期存在的规范。另一方面,设计这种蹩脚(不是 JSON!)文件格式的傻瓜可能会嘲笑其他人的系统等,因为系统无法应对their废话。
UPDATE
还值得一读的是JSON RFC (RFC 7159) https://www.rfc-editor.org/rfc/rfc7159就这个话题说。以下是一些摘录:
自 RFC 4627 发布以来的这些年里,JSON 发现了非常
用途广泛。这种经历揭示了某些模式,
虽然其规范允许,但已引起互操作性
问题。
JavaScript 对象表示法 (JSON) 是一种文本格式
结构化数据的序列化。 ...
JSON 可以表示四种基本类型(字符串、数字、布尔值、
和 null)和两种结构化类型(对象和数组)。
一个对象是一个无序的零个或多个名称/值的集合
对,其中名称是字符串,值是字符串、数字,
布尔值、null、对象或数组。
据观察,JSON 解析库在是否或
不是它们使对象成员的顺序对调用可见
软件。其行为不依赖于成员的实现
排序将是可互操作的,因为它们不会
受这些差异的影响。