在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对象,则可能有一个候选者可以重构为多个服务。
{
"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>
NSNull
具有单例实例的已定义类。对该实例的引用等效于JSON的引用null
。我猜想另一种语言可以做同样的事情。当然,在转换为假定的类之前,必须先检查接收到的对象的类-保持“空感知”。
Collections.emptyList()
)。这样做避免了空引用错误,否则可能会很痛苦。
Null
类,因为您只能将其值分配给其自身类型或type的对象Object
。
null
,请考虑使用空字符串还是让客户更好null
-包含单词“ null”的字符串与有效值是无法区分的,请不要这样做。