JSON 数据结构在列表和布尔值之间变化是否有效

Is it valid for JSON data structure to vary between a list and a boolean

jstree 的 json 数据结构在 https://github.com/vakata/jstree 中定义,这里是一个例子

[ { "text" : "Root node", "children" : [ "Child node 1", "Child node 2" ] } ]

值得注意的是

The children key can be used to add children to the branch, it should be an array

然而,稍后在 使用 AJAX 和延迟加载节点 填充树部分中,它显示使用 set children to false 来指示何时未处理子节点

[{
  "id":1,"text":"Root node","children":[
    {"id":2,"text":"Child node 1","children":true},
    {"id":3,"text":"Child node 2"}
  ]
}]

所以在这里我们看到 children 被用作 arrayboolean

我以 jstree 为例,因为这是我遇到问题的地方,但我的问题实际上是一个一般性的 json 问题。我的问题是,对于 json 中的同一元素,两种不同类型(数组和布尔值)

是否有效 JSON

结构明智,两者都是有效的 JSON 数据包。这没关系,因为 JSON 比 XML(带有 XSD 或 DTD)严格一些。根据:https://www.w3schools.com/js/js_json_objects.asp

JSON objects are surrounded by curly braces {}.
JSON objects are written in key/value pairs.
Keys must be strings, and values must be a valid JSON data type (string, number, object, array, boolean or null).
Keys and values are separated by a colon.
Each key/value pair is separated by a comma.

话虽如此,如果允许发送方发送这样的 JSONs,唯一需要注意的是服务器端在收到此类不同的数据包时必须处理这种差异。这是一个看起来很糟糕的合同,因此服务器可能需要做额外的工作来管理它。服务器端处理此类传入 JSON 数据包可能会变得棘手。

参见:

您可以在 https://jsonlint.com/

验证 JSON 是否正常

在这个答案中查看有关 JSON 的更多信息:

json验证的东西 https://www.npmjs.com/package/json-validation https://davidwalsh.name/json-validation.

有效Json。 JSON RFC 8259 defines a general syntax but it contains nothing that would allow a tool to identify that two equally named entries are meant to describe the same conceptual thing。 需要有一个标准来检查 instance equality has been one motivation to create something like Json Schema.

的两个 JSON 结构

我也认为javascript提供这种混合数据并不少见。有时它可能有助于显式转换 javascript object to JSON。喜欢 JSON.stringify(testObject)