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

时间:2018-01-31 10:51:50

标签: json jstree

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

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

值得注意的是

  

子键可用于将子项添加到分支,它应该   是一个数组

但是稍后在使用AJAX和延迟加载节点填充树一节中,它显示使用set children为false来指示孩子何时没有被处理

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

所以在这里我们看到孩子们既用作数组又用作布尔

我使用 jstree 作为示例,因为这是我遇到问题的地方,但我的问题实际上是一个普遍的json问题。我的问题是,json中相同元素的有效JSON是两种不同的类型(数组和布尔值)

3 个答案:

答案 0 :(得分:1)

这是有效的Json。 JSON RFC 8259定义了一般语法,但它不包含允许工具识别两个同名条目用于描述the same conceptual thing的内容。 需要有一个标准来检查instance equality的两个JSON结构,这是创建类似Json Schema之类的动机的一个动机。

我还认为javascript提供这种混合数据并不是很不寻常。有时,显式转换javascript object to JSON可能会有所帮助。就像JSON.stringify(testObject)

一样

答案 1 :(得分:0)

结构方面,两者都是有效的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.

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

请参阅:How do I create JSON data structure when element can be different types in for use by

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

验证JSON是否可以

在此答案中查看有关JSON的更多信息:https://stackoverflow.com/a/4862511/945214

答案 2 :(得分:0)