Каков предпочтительный метод для возврата нулевых значений в JSON? Есть ли другое предпочтение примитивам?
Например, если мой объект на сервере имеет Integer с именем «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 помогут нормализовать потребление и повторное использование указанных услуг. Что касается установления стандарта, я бы предложил принять большинство соглашений Джексона с несколькими исключениями:
- Объекты предпочтительнее примитивов.
- Пустые коллекции предпочтительнее нуля.
- Объекты без значения представлены как ноль.
- Примитивы возвращают свою ценность.
Если вы возвращаете объект 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
класса, потому что вы сможете назначать его значения только объектам его собственного типа или типа Object
.
null
, подумайте, лучше ли ваш клиент с пустой строкой илиnull
- строка, содержащая слово «ноль», неотличима от допустимого значения, не делайте этого.