Apa metode yang disukai untuk mengembalikan nilai nol di JSON? Apakah ada preferensi yang berbeda untuk primitif?
Misalnya, jika objek saya di server memiliki Integer yang disebut "myCount" tanpa nilai, JSON paling benar untuk nilai itu adalah:
{}
atau
{
"myCount": null
}
atau
{
"myCount": 0
}
Pertanyaan yang sama untuk Strings - jika saya memiliki string nol "myString" di server, adalah JSON terbaik:
{}
atau
{
"myString": null
}
atau
{
"myString": ""
}
atau (tuan bantu aku)
{
"myString": "null"
}
Saya suka konvensi untuk koleksi diwakili di JSON sebagai koleksi kosong http://jtechies.blogspot.nl/2012/07/item-43-return-empty-arrays-or.html
Array kosong akan ditampilkan:
{
"myArray": []
}
Ringkasan EDIT
Argumen 'preferensi pribadi' tampak realistis, tetapi kelihatannya tidak terlalu jelas, sebagai sebuah komunitas, kita akan mengkonsumsi lebih banyak layanan / sumber yang berbeda. Konvensi untuk struktur JSON akan membantu menormalkan konsumsi dan penggunaan kembali layanan tersebut. Sejauh menetapkan standar, saya akan menyarankan mengadopsi sebagian besar konvensi Jackson dengan beberapa pengecualian:
- Objek lebih disukai daripada primitif.
- Koleksi kosong lebih disukai daripada nol.
- Objek tanpa nilai direpresentasikan sebagai null.
- Primitif mengembalikan nilainya.
Jika Anda mengembalikan objek JSON dengan nilai sebagian besar nol, Anda mungkin memiliki kandidat untuk melakukan refactoring ke beberapa layanan.
{
"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 di atas dihasilkan dari kelas Java berikut.
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()));
}
}
Ketergantungan maven:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.3.0</version>
</dependency>
NSNull
kelas yang didefinisikan yang memiliki instance tunggal. Referensi ke instance itu setara dengan JSON null
. Saya kira bahasa lain bisa melakukan hal yang sama. Tentu saja, seseorang harus memeriksa kelas objek yang diterima sebelum melakukan casting ke kelas yang diduga - menjadi "null aware", seolah-olah.
Collections.emptyList()
). Melakukan hal itu menghindari bug referensi nol yang dapat menyusahkan jika tidak.
Null
karena Anda hanya akan dapat menetapkan nilainya ke objek dari tipe atau tipe sendiri Object
.
null
, pertimbangkan apakah klien Anda lebih baik menggunakan string kosong ataunull
- string yang berisi kata "null" tidak dapat dibedakan dari nilai yang valid, jangan lakukan itu.