1

我试图转换 JSON 数据

{
  "a": {
    "b": null
  }
}

使用在线转换器转换为 XML 。回应是

<a>
  <b />
</a>

使用相同的转换器将其转换回 JSON 给了我

{
  "a": {

  }
}

这让我想知道——如果你明确地给了一个空值,你在处理 JSON 时是否需要保留它?我相当肯定 XML等同于,尤其<a><b /></a>是不等同于(当我继续进行相同的练习时,这恰好是我得到的)。<a></a><a />

换句话说,如果我收到了来源不明的 JSON 并且应该将其交给未知的接收者,我是否需要保留空值,或者我可以安全地删除它们吗?相反,我可以依靠我的空值以与第三方软件交付时输出它们的方式相同的方式结束吗?

这里有一个类似的问题:JSON 是否应该包含空值——但是,问题是如果您自己定义格式,代码是否应该输出空值,而不是如果您对原始格式一无所知,您应该做什么。

编辑 - 澄清:我问这个问题的方式很糟糕,显然引起了混乱。换个说法:我确实理解 XML 和 JSON 是不同的格式,并且能够携带不同种类的(元)数据。我知道null是一个有效值,如RFC4627所定义。我确实了解在 XML 和 JSON 之间进行转换有不同的方法,因为这些格式没有一对一的关系。我明白我发现的转换器可能有问题。然而,同一个转换器在两个方向上都没有提供相同的转换(从转换"b": null<b />并且可以在相反的方向进行类似的翻译)让我想知道尽管尝试了但我找不到答案的事情:

  • 根据 JSON 标准,在代表其他软件传输它们时将{"a":{"b":null}}和视为同一个对象是否合法?{"a":{}}

请注意,我在这里假设添加或删除我认为合适的空格是合法的(例如,漂亮的打印,根据 RFC4627 可以),甚至重新排列集合中的名称/值对(再次根据 RFC4627 )。我只是不知道null是否必须以与重要数据相同的方式保留,或者可以以与无关紧要的空白相同的方式删除。

4

2 回答 2

0

是的,null 是 JSON 中的一个单独值,显然与没有属性不同。此外,您可以看到有关 XML 中的空值的问题。这里要总结的不是 JSON 或 XML 有什么问题,而只是你使用的工具没有编码来处理这些情况。

于 2012-06-18T11:14:57.950 回答
0

将 JSON 转换为 XML 的问题之一是,如果您尝试使转换无损,您最终会得到有点“不自然”的 XML,而如果您尝试创建最自然的 XML 表示,它最终会丢失信息。这就是为什么有许多不同的转换器都以稍微不同的方式来做这件事的原因。选择符合您要求的一种。

于 2012-06-18T14:05:44.110 回答