在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公约,但有一些例外:
如果您要返回一个大多数为空值的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>
让我们评估每个的解析:
http://jsfiddle.net/brandonscript/Y2dGv/
var json1 = '{}';
var json2 = '{"myCount": null}';
var json3 = '{"myCount": 0}';
var json4 = '{"myString": ""}';
var json5 = '{"myString": "null"}';
var json6 = '{"myArray": []}';
console.log(JSON.parse(json1)); // {}
console.log(JSON.parse(json2)); // {myCount: null}
console.log(JSON.parse(json3)); // {myCount: 0}
console.log(JSON.parse(json4)); // {myString: ""}
console.log(JSON.parse(json5)); // {myString: "null"}
console.log(JSON.parse(json6)); // {myArray: []}
该 TL;博士 在这里:
json2 变量中的片段是JSON规范所表示的方式
null
。但是,一如既往,这取决于您的工作-
有时,“正确”的做法并不总是适合您的情况。使用您的判断并做出明智的决定。
JSON1{}
这将返回一个空对象。那里没有数据,只会告诉您您要寻找的任何键(无论是键还是其他键myCount
)都是type undefined
。
JSON2{"myCount": null}
在这种情况下,myCount
实际上是定义了,尽管其值为null
。这是 不
一样的两个“不undefined
,不null
”,如果你是一个条件或其他测试,这可能会成功,而JSON1会失败。
这是null
按照JSON规范表示的确定方式。
JSON3{"myCount": 0}
在这种情况下,myCount为0。与null
,和并不相同false
。如果您的条件语句评估为myCount > 0
,那么这可能是值得的。此外,如果您基于此处的值运行计算,则0可能会有用。null
但是,如果您要进行测试,那么这实际上是行不通的。
JSON4{"myString": ""}
在这种情况下,您将得到一个空字符串。同样,与JSON2一样,它已定义,但它为空。您可以测试,if (obj.myString == "")
但不能测试null
或undefined
。
JSON5{"myString": "null"}
这很可能会给您带来麻烦,因为您将 字符串 值设置为null。在这种情况下,obj.myString == "null"
但它是 不是 == null
。
JSON6{"myArray": []}
这将告诉您数组myArray
存在,但它为空。如果您要对进行计数或评估,这将很有用myArray
。例如,假设您要评估用户发布的照片数量-
您可以这样做myArray.length
,它将返回0
:defined,但没有发布照片。
问题内容: 使用AJAX发出POST请求后,我得到以下JSON响应: 我正在使用数据表来显示数据..但是使用此嵌套的JSON,我无法直接获取数据。我正在使用此https://datatables.net/examples/server_side/post.html https://datatables.net/reference/option/ajax.dataSrc作为参考。 问题答案: 您必须
问题内容: 我正在尝试反序列化以下字符串,对于Java来说我还是有些陌生,我无法在我的一生中使用它。我现在仅尝试在对象中解码两个字符串。我的JSON和Java类如下。我得到的结果变量确定。 还有我下面的java类 请原谅我缺乏描述,但是我确信代码会有所帮助。JSON已在其他应用程序中使用,因此不可更改。 谢谢! 问题答案: 这是一些不错的JSON教程,可以帮助您。 GSON JSON格式 带有源代
我想将这个JSON反序列化为一个C#类,但我需要首先定义这个类: 我想将它反序列化为如下所示,但不确定我的JSON结构是否适合它: 我应该如何更改上面的JSON以适应下面的类,这样我就可以使用JsonConvert来反序列化它了? 谢了!
问题内容: 我正在尝试使用Chart JS 创建一个表,该表具有来自JSON文件的动态生成的数据点。我的代码的逻辑如下所示: 同时,我的JSON文件如下所示: 该变量包含ChartJS的配置设置,包括设置数据点。当加载到ChartJS中时,提供显示我的图表所需的信息。 无论如何,我的想法是使用变量作为使用for循环附加数据集的一种方式。不幸的是,该代码未产生任何结果。我知道我添加变量的方法有问题,
我做了一个教程,用world-50m.json文件在d3中显示地图。然而,我希望使用我自己的json文件。这是我的. json文件的结构。 “类型”:“FeatureCollection”,“features”:[{“type”:“Feature”,“properties”:{“FID”:0.000000},“geometry”:{“type”:“MultiPolygon”,“坐标”:[[[[14
我有返回Json格式数据的C#函数,函数如下 执行此操作时,我遇到以下错误: null