Jaka jest preferowana metoda zwracania wartości zerowych w JSON? Czy istnieje inna preferencja dla prymitywów?
Na przykład, jeśli mój obiekt na serwerze ma liczbę całkowitą o nazwie „myCount” bez wartości, najbardziej poprawnym JSON dla tej wartości byłoby:
{}
lub
{
"myCount": null
}
lub
{
"myCount": 0
}
To samo pytanie dla ciągów - jeśli mam ciąg zerowy „myString” na serwerze, to najlepszy JSON:
{}
lub
{
"myString": null
}
lub
{
"myString": ""
}
lub (Panie, pomóż mi)
{
"myString": "null"
}
Podoba mi się konwencja reprezentowania kolekcji w JSON jako pusta kolekcja http://jtechies.blogspot.nl/2012/07/item-43-return-empty-arrays-or.html
Pusta tablica byłaby reprezentowana:
{
"myArray": []
}
Podsumowanie edycji
Argument „osobistych preferencji” wydaje się realistyczny, ale w skrócie, jako społeczność będziemy konsumować coraz większą liczbę różnych usług / źródeł. Konwencje dotyczące struktury JSON pomogłyby znormalizować zużycie i ponowne wykorzystanie tych usług. Jeśli chodzi o ustanowienie standardu, proponuję przyjęcie większości konwencji Jacksona z kilkoma wyjątkami:
- Przedmioty są lepsze od prymitywów.
- Puste kolekcje są preferowane niż puste.
- Obiekty bez wartości są reprezentowane jako null.
- Prymitywy zwracają swoją wartość.
Jeśli zwracasz obiekt JSON z przeważnie wartościami zerowymi, możesz mieć kandydata do refaktoryzacji do wielu usług.
{
"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
}
Powyższy JSON został wygenerowany z następującej klasy 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()));
}
}
Zależność od Maven:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.3.0</version>
</dependency>
NSNullklasa, która ma instancję singleton. Odwołanie do tego wystąpienia jest równoważne odwołaniu JSON null. Domyślam się, że inny język mógłby zrobić to samo. Oczywiście należałoby sprawdzić klasę otrzymanego obiektu przed rzutem na przypuszczalną klasę - być „zerowym świadomym”, jak to było.
Collections.emptyList().). Pozwala to uniknąć błędów zerowych odniesień, które w innym przypadku mogą być uciążliwe.
Nullklasy, ponieważ można przypisać jej wartości tylko do obiektów własnego typu lub typu Object.

null, zastanów się, czy lepiej jest dla twojego klienta z pustym ciągiem lubnull- ciąg zawierający słowo „null” jest nie do odróżnienia od prawidłowej wartości, nie rób tego.