是否应保留 JSON 空值



>我试图转换JSON数据

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

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

<a>
  <b />
</a>

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

{
  "a": {
  }
}

这让我想知道 - 如果您被显式赋予一个空值,那么在处理 JSON 时是否需要保留它?我相当确定 XML <a><b /></a>不等同于 <a></a> ,尤其是<a />(当我继续相同的练习时,这恰好是我得到的)。

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

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

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

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

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

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

将 JSON 转换为 XML 的一个问题是,如果您尝试使转换无损,您最终会得到一些"不自然"的 XML,而如果您尝试创建最自然的 XML 表示形式,它最终会丢失信息。这就是为什么有很多不同的转换器都以略有不同的方式做到这一点。选择符合您要求的一种。