将JSON映射到XML的潜在问题

时间:2015-10-12 03:25:30

标签: json xml

将JSON映射到XML的主要问题是什么?反之亦然?我遇到了一系列问题,但如果其他人可以添加他们在两者之间进行转换时遇到的问题,那将会非常有用。

我的清单是:

2 个答案:

答案 0 :(得分:2)

免责声明:我是Jsonix的作者,这是一个用JavaScript编写的XML< - > JSON转换库。所以我从复杂的XML和JSON之间的映射经验谈起了一点。

  • JSON中的顶级生产可能是JSONArrayJSONObject(以JSON交换格式甚至任何JSONText - 也是null,boolean,string,number)。 XML需要一个根元素。
  • JSON对象具有属性,XML元素可能具有属性,包含子元素和文本值(我甚至会留下注释和PI)。
  • 你提到“键不能以数字开头”,但语法不兼容性更高。 JSON对象属性基本上可以是任何字符串。 XML元素和属性名称在语法上受到限制。
  • 通常在JSON中没有名称空间,通常是XML中的名称空间。
  • 严格打字。通过查看值,您始终了解JSON类型。在XML中,您无法从值中猜出类型。例如,1可以是字符串,布尔值,十几种数字类型等。您必须知道模式才能知道类型。
  • 在JSON中,您可以从值(对象或数组)猜测结构。在XML中,如果您看到单个元素,则不知道它是否可以重复。您必须知道架构才能知道结构。
  • 集合通常表示为JSON中的数组。在XML中,您可以将集合表示为可重复的元素(item*),可能包装(items/item*),或者在简单类型的情况下表示为列表类型(<items>a b c d</items>)。
  • 在XML中,元素的子元素或文本节点的顺序很重要。在JSON中,JSONObject的属性未排序。 (你提到这个。)
  • 在XML中,元素可能包含多个同名的子元素。在JSONObject中,属性名称将是唯一的。 (你提到这个。)
  • 在XML中,元素可以包含属性,子元素和文本节点。在JSON中,唯一复杂的结构是JSONObjectJSONArray。在JSONArray中,您只有项目,没有命名组件(类似于属性或子元素)。在JSONObject中,您只有属性(JSONMembers),它们总是“命名”(这类似于XML的属性和子元素,但不类似于文本节点)。
  • 以XML格式处理说明和注释,而不是XML中的直接类比。
  • 还有xsi:type构造,有点难以处理。指定文档实例中元素值的类型。
  • 在XML中,某些类型的值(如QName s)取决于XML文档其他部分的声明。例如,将my:Element设置为xs:QName - 某处的值,此值将取决于文档中如何声明my命名空间前缀。由于可以声明和重新声明名称空间,因此必须非常精确地遵循它们的声明才能找到限定名称的名称空间。

答案 1 :(得分:1)

将特定的JSON对象(或对象类)转换为XML通常没有问题。编写一个可以处理任何 JSON对象的转换器很困难。问题本质上是因为您希望简单的JSON最终成为简单的XML,但是您发现自己扭曲设计来处理边缘情况,例如JSON合法而不是XML的字符,保留区别,例如数字之间的区别10和字符串“10”,或担心JSON“null”的最佳表示。