当前位置: 首页 > 面试题库 >

值的顺序在JSON对象中是否重要?

钱建本
2023-03-14
问题内容

我有一个在Java程序中构造的JSON对象。

JSONObject jObj = {"AAA:aaa","BBB:bbb","CCC:ccc"}

我将此对象发送到服务器,在该服务器中期望以下类型的JSON对象。

{"BBB:bbb", "AAA:aaa", "CCC:ccc"}

我的问题是,JSON对象的顺序在服务器端真的重要吗?如果是,如何更改订单?


问题答案:

我的问题是,JSON对象的顺序在服务器端真的重要吗?

不应该 没关系。根据各种JSON规范,属性的顺序并不重要。例如:

“对象是一组无序的名称/值对。” (来源json.org)

“对象是零个或多个名称/值对的无序集合,其中名称是字符串,而值是字符串,数字,布尔值,空值,对象或数组。” (来源RFC
7159

不幸的是,笨蛋在那里1谁忽略了规范的这一方面,并把属性的顺序上有一定意义。(通常,在指定API的人员与实现API的人员之间存在脱节,并且从事规范工作的人员并不真正理解JSON时,通常会犯此错误。)

幸运的是,无论谁设计/实施服务器,都没有犯错。我遇到的大多数Java JSON解析器在解析时都不会保留属性顺序…默认情况下2。很难 意外地
实现一个服务器,其中要解析的JSON属性的顺序很重要。

如果是,我如何更改订单?

带着困难,我担心:

  • 您可以手动生成JSON。
  • Java实现3至少有一个JSON ,可让您提供Map包含JSON对象属性的对象。如果使用LinkedHashMapTreeMap,则应保留属性键的插入顺序或词法顺序。

1-例如,这个可怜的开发人员正在为…工作的机智…

2-RFC 7159也这样说:“已经观察到JSON解析库在是否使调用软件可见对象成员的顺序方面存在差异。
行为不取决于成员顺序的实现在以下方面是可以互操作的:他们不会受到这些差异的影响。 ” 根据我的阅读,这建议JSON库 应从
应用程序代码中隐藏任何对的顺序。

3-JSON简单:https :
//code.google.com/p/json-simple/。可能还会有其他人。



 类似资料:
  • 问题内容: 我有下一个JSON: 知道JSON对象中是否存在“ dog”值的最佳方法是什么? 谢谢。 解决方案1 解决方案2(JQuery) 解决方案3(使用some()方法) 问题答案: JSON变量引用具有一个称为“名称”的属性的对象数组。我不知道最好的方法,但这就是我的工作吗?

  • 问题内容: 我正在创建一个JavaScript对象,如下所示 之后,我将它们如下 上面的方法是否按照对象先前的顺序对它们进行了字符串化处理?字符串化后,它们将按照以前的顺序排列为0,1,2 .... 9吗? 问题答案: 文档中没有任何内容可以明确确认数组项的顺序已保留。但是,文档指出,对于非数组属性,不能保证顺序: 非数组对象的属性不能保证以任何特定顺序进行字符串化。不要依赖于字符串化中同一对象内

  • 问题内容: 我知道有一个可预测的迭代顺序(插入顺序)。是否Set通过返回和返回的也维持这种秩序? 问题答案: Map界面提供了三个 集合视图,这些视图允许将地图的内容视为一组键,值的集合或一组键-值映射。该订单的地图被定义为其中在地图上的集合视图迭代返回元素的顺序。某些地图实现(例如TreeMap 类)会对其顺序做出具体保证;其他人,例如 上课者 -Map 此链表定义了迭代顺序,通常是将键插入映射

  • 问题内容: 我正在寻找一个JSON解析库,该库支持比较两个JSON对象(忽略子顺序),特别是对从Web服务返回的JSON进行单元测试。 任何主要的JSON库都支持吗?org.json库仅进行参考比较。 问题答案: 作为一般的体系结构要点,我通常建议不要让对特定序列化格式的依赖性超出存储/网络层的范围。因此,我首先建议你考虑测试自己的应用程序对象之间的相等性,而不是它们的JSON表现形式。 话虽如此

  • 问题内容: 如果我创建这样的对象: 生成的对象会 总是 这样吗? 也就是说,属性的顺序是否与我添加它们的顺序相同? 问题答案: 自ES2015起,对象的迭代顺序遵循一组特定的规则,但不(始终)遵循插入顺序。简而言之,迭代顺序是字符串键的插入顺序和数字键的升序的组合: 使用数组或Map对象可能是实现此目的的更好方法。Map与密钥共享一些相似之处Object并保证密钥按插入顺序进行迭代,无一例外: M

  • 问题内容: 如果我有两列,一列具有非常高的基数,而另一列具有非常低的基数(值的唯一数目),那么按哪个顺序分组是否重要? 这是一个例子: 在某些情况下重要吗? 问题答案: 不,顺序对于GROUP BY子句无关紧要。 MySQL和SQLite是我所知道的仅有的数据库,它允许您选择按组方式(非标准,不可移植)从组中省略的列,但是顺序也不重要。