应该保留JSON null吗?

应该保留JSON null吗?,json,Json,我试图转换JSON数据 { "a": { "b": null } } 使用。答复是: <a> <b /> </a> 这让我想知道——如果显式地给您一个空值,那么在处理JSON时是否需要保留它?我相当肯定XML——但是,问题是如果您自己定义格式,代码是否应该输出null,而不是如果您对原始格式一无所知,应该怎么做 编辑–澄清:我问问题的方式很糟糕,显然造成了混乱。换言之:我确实理解XML和JSON是不同的格式,能够承载不同类型的(元数据)

我试图转换JSON数据

{
  "a": {
    "b": null
  }
}
使用。答复是:

<a>
  <b />
</a>
这让我想知道——如果显式地给您一个空值,那么在处理JSON时是否需要保留它?我相当肯定XML
——但是,问题是如果您自己定义格式,代码是否应该输出null,而不是如果您对原始格式一无所知,应该怎么做

编辑–澄清:我问问题的方式很糟糕,显然造成了混乱。换言之:我确实理解XML和JSON是不同的格式,能够承载不同类型的(元数据)数据。我确实知道,null是一个有效值,如所定义的。我知道XML和JSON之间有不同的转换方式,因为格式之间没有1对1的关系。我知道我找到的转换器可能有问题。然而,同一个转换器在两个方向上没有提供相同的转换(从
“b”:null
转换为
时没有丢失任何信息,并且可以在相反方向上进行类似的转换)这一事实让我感到奇怪,尽管有人尝试,我还是找不到答案:

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

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

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

将JSON转换为XML的问题之一是,如果您尝试无损地进行转换,您最终会得到一些“不自然”的XML,然而,如果您试图创建最自然的XML表示,它最终会丢失信息。这就是为什么有很多不同的转换器,它们都以稍微不同的方式进行转换。选择一种符合您要求的格式。

JSON是一种交换格式,不定义如何处理您收到的内容。选择链接到的转换器是为了保留您定义的
b
,而不是简单地不发送它。我看没问题。@dystroy:我不是想问有人发送给我的JSON怎么办。我想弄清楚我应该如何以合法的方式对待为其他人准备的JSON。另外,您还将关注JSON被转换为XML时发生的事情。我想知道的是一个JSON对象与其他JSON对象的关系。我注意到有人投票支持结束这个问题。我仔细阅读了常见问题,没有发现问题所在。如果你能给我解释一下怎么回事,我将不胜感激。请,至少给我一个学习的机会。你可能是对的,但我不确定你的论点是否正确。据我所知,您的意思是,既然XML以某种方式工作,JSON也必须以某种方式工作。但是,在JSON中,因此不能假设某个表示中的顺序。XML肯定不是这样。换句话说,子节点不能仅仅因为名称不同而任意重新排序。因此,引用XML中的正确信息来证明JSON中的正确信息是不正确的。@Andersjöqvist:你误解了我的意思。这是两个独立的论点,声称XML和JSON都有一种方法可以用标准方式表示
null
。我不是在从一个推断另一个的正确性。假设数据丢失是不好的,除非是有意的,我认为这些工具搞糟了:它们将JSON的空值转换成XML中的空字符串,然后在返回JSON时,将空字符串作为不存在的属性删除。这两种行为都不是我所期望的。谢谢迈克尔。你的回答很有帮助,并强调了转换很棘手的事实,但我真正想知道的是我应该如何在不违反任何规则的情况下处理JSON,而不是找到一个为我执行特定操作的工具。你可以用任何你喜欢的方式处理JSON:只有你知道它的含义。如果null在特定输入中表示零,则将其视为零。与SQL一样,null的含义完全取决于发送方和接收方之间的协议。
{
  "a": {

  }
}