Phương thức ưa thích để trả về các giá trị null trong JSON là gì? Có một ưu tiên khác nhau cho người nguyên thủy?
Ví dụ: nếu đối tượng của tôi trên máy chủ có một Số nguyên gọi là "myCount" không có giá trị, thì JSON chính xác nhất cho giá trị đó sẽ là:
{}
hoặc là
{
"myCount": null
}
hoặc là
{
"myCount": 0
}
Câu hỏi tương tự cho Chuỗi - nếu tôi có chuỗi null "myString" trên máy chủ, là JSON tốt nhất:
{}
hoặc là
{
"myString": null
}
hoặc là
{
"myString": ""
}
hoặc (chúa giúp tôi)
{
"myString": "null"
}
Tôi thích quy ước cho các bộ sưu tập được thể hiện trong JSON dưới dạng một bộ sưu tập trống http://jtechies.blogspot.nl/2012/07/item-43-return-empty-arrays-or.html
Một mảng trống sẽ được trình bày:
{
"myArray": []
}
Tóm tắt EDIT
Đối số 'sở thích cá nhân' có vẻ thực tế, nhưng thiển cận ở chỗ, vì là một cộng đồng, chúng ta sẽ tiêu thụ một số lượng lớn hơn các dịch vụ / nguồn khác nhau. Các quy ước về cấu trúc JSON sẽ giúp bình thường hóa việc tiêu thụ và tái sử dụng các dịch vụ nói trên. Theo như thiết lập một tiêu chuẩn, tôi sẽ đề nghị áp dụng hầu hết các công ước của Jackson với một vài ngoại lệ:
- Đối tượng được ưa thích hơn so với nguyên thủy.
- Bộ sưu tập trống được ưa thích hơn null.
- Các đối tượng không có giá trị được biểu diễn dưới dạng null.
- Người nguyên thủy trả lại giá trị của họ.
Nếu bạn đang trả về một đối tượng JSON có giá trị hầu hết là null, bạn có thể có một ứng cử viên để tái cấu trúc thành nhiều dịch vụ.
{
"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 ở trên được tạo từ lớp Java sau.
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()));
}
}
Phụ thuộc Maven:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.3.0</version>
</dependency>
NSNull
lớp được xác định có một cá thể đơn lẻ. Một tham chiếu đến thể hiện đó tương đương với JSON null
. Tôi đoán rằng một ngôn ngữ khác có thể làm điều tương tự. Tất nhiên, người ta sẽ phải kiểm tra lớp của đối tượng nhận được trước khi chuyển sang lớp được giả định - là "không biết", như vậy.
Collections.emptyList()
). Làm như vậy để tránh các lỗi tham chiếu null có thể là một nỗi đau khác.
Null
lớp (hữu ích) vì bạn chỉ có thể gán các giá trị của nó cho các đối tượng thuộc loại hoặc kiểu riêng của nó Object
.
null
, hãy xem xét liệu khách hàng của bạn có tốt hơn với chuỗi trống haynull
- một chuỗi chứa từ "null" không thể phân biệt được với một giá trị hợp lệ, đừng làm điều đó.