在JSON中返回空值的首选方法是什么?对原语有不同的偏好吗?
例如,如果我在服务器上的对象有一个名为“myCount”的整数,没有值,最正确的JSON值将是:
{}
or
{
"myCount": null
}
or
{
"myCount": 0
}
同样的问题字符串-如果我有一个空字符串“myString”在服务器上,是最好的JSON:
{}
or
{
"myString": null
}
or
{
"myString": ""
}
或者(上帝帮助我)
{
"myString": "null"
}
我喜欢在JSON中将集合表示为空集合http://jtechies.blogspot.nl/2012/07/item-43-return-empty-arrays-or.html的约定
一个空数组将被表示:
{
"myArray": []
}
编辑总结
“个人偏好”的论点似乎是现实的,但目光短浅,作为一个社区,我们将消费越来越多的不同的服务/资源。JSON结构的约定将有助于规范上述服务的使用和重用。至于建立标准,我建议采用杰克逊的大部分约定,只有少数例外:
对象优先于原语。 空集合优先于空集合。 没有值的对象表示为null。 原语返回它们的值。
如果返回的JSON对象大部分为空值,则可能需要将其重构为多个服务。
{
"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>