在 JSON 中,返回空值的首选方法是什么?原始数据类型是否有不同偏好?
例如,如果我的服务器对象中有一个名为“myCount”的整数,但没有值,则该值的最正确 JSON 是:
{}
或者{
"myCount": null
}
或{
"myCount": 0
}
如果在服务器上我有一个空字符串"myString",那么最好的JSON是什么?
{}
或者{
"myString": null
}
或者{
"myString": ""
}
或者(上帝保佑我)
{
"myString": "null"
}
我喜欢将集合表示为JSON中的空集合的惯例。http://jtechies.blogspot.nl/2012/07/item-43-return-empty-arrays-or.html
一个空数组将被表示为:
{
"myArray": []
}
编辑摘要
"个人偏好"的论点似乎是现实的,但是这种看法是短视的,因为作为一个社区,我们将消耗越来越多不同的服务/来源。制定JSON结构的约定将有助于规范所述服务的使用和重复利用。至于建立标准,我建议采用大部分Jackson约定,但有一些例外:
- 对象优先于基元。
- 空集合优先于null。
- 没有值的对象表示为null。
- 基元返回其值。
如果您返回的JSON对象大多数都是null值,则可能需要将其重构为多个服务。
{
"value1": null,
"value2": null,
"text1": null,
"text2": "hello",
"intValue": 0, //use primitive only if you are absolutely sure the answer is 0
"myList": [],
"myEmptyList": null, //NOT BEST PRACTICE - return [] instead
"boolean1": null, //use primitive only if you are absolutely sure the answer is true/false
"littleboolean": false
}
以上 JSON 是从以下 Java 类生成的。
package jackson;
import java.util.ArrayList;
import java.util.List;
import com.fasterxml.jackson.databind.ObjectMapper;
public class JacksonApp {
public static class Data {
public Integer value1;
public Integer value2;
public String text1;
public String text2 = "hello";
public int intValue;
public List<Object> myList = new ArrayList<Object>();
public List<Object> myEmptyList;
public Boolean boolean1;
public boolean littleboolean;
}
public static void main(String[] args) throws Exception {
ObjectMapper mapper = new ObjectMapper();
System.out.println(mapper.writeValueAsString(new Data()));
}
}
Maven 依赖:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.3.0</version>
</dependency>
null
,请考虑您的客户端是否更适合使用空字符串或null
——包含单词"null"的字符串与有效值无法区分,不要这样做。 - Philipp ReichartNSNull
类,它拥有一个单例实例。对该实例的引用相当于 JSON 的null
。我想其他语言也可以做到这一点。当然,在强制转换为预定类之前,必须检查接收到对象的类别——要有“空值意识”。 - Hot LicksCollections.emptyList()
)。这样做可以避免空引用错误,否则可能会很麻烦。 - Periata BreattaNull
类,因为你只能将其值分配给其自身类型或Object
类型的对象。 - Periata Breatta