วิธีที่แนะนำสำหรับการคืนค่า null ใน JSON คืออะไร มีการตั้งค่าที่แตกต่างกันสำหรับดั้งเดิม?
ตัวอย่างเช่นหากวัตถุของฉันบนเซิร์ฟเวอร์มีจำนวนเต็มชื่อ "myCount" โดยไม่มีค่า JSON ที่ถูกต้องที่สุดสำหรับค่านั้นจะเป็น:
{}
หรือ
{
"myCount": null
}
หรือ
{
"myCount": 0
}
คำถามเดียวกันสำหรับ Strings - ถ้าฉันมีสตริง "myString" บนเซิร์ฟเวอร์เป็น JSON ที่ดีที่สุด:
{}
หรือ
{
"myString": null
}
หรือ
{
"myString": ""
}
หรือ (พระเจ้าช่วยฉันด้วย)
{
"myString": "null"
}
ฉันชอบการประชุมสำหรับคอลเลกชันที่จะแสดงใน JSON เป็นคอลเลกชันที่ว่างเปล่าhttp://jtechies.blogspot.nl/2012/07/item-43-return-empty-arrays-or.html
อาร์เรย์ที่ว่างเปล่าจะถูกแทน:
{
"myArray": []
}
สรุปแก้ไข
อาร์กิวเมนต์ 'การตั้งค่าส่วนตัว' ดูเหมือนเป็นจริง แต่มองในระยะสั้นเนื่องจากชุมชนเราจะต้องใช้บริการ / แหล่งข้อมูลที่แตกต่างกันมากขึ้นเรื่อย ๆ อนุสัญญาสำหรับโครงสร้าง JSON จะช่วยทำให้การบริโภคเป็นปกติและนำบริการดังกล่าวกลับมาใช้ใหม่ เท่าที่มีการกำหนดมาตรฐานฉันขอแนะนำให้ใช้การประชุมแจ็คสันส่วนใหญ่โดยมีข้อยกเว้นบางประการ:
- วัตถุเป็นที่ต้องการมากกว่าดั้งเดิม
- คอลเลกชันที่ว่างเปล่าเป็นที่ต้องการมากกว่าศูนย์
- วัตถุที่ไม่มีค่าแสดงเป็นโมฆะ
- การส่งคืนค่าดั้งเดิม
หากคุณส่งคืนออบเจ็กต์ JSON ที่มีค่า Null เป็นส่วนใหญ่คุณอาจมีตัวเลือกสำหรับการเปลี่ยนโครงสร้างเป็นหลาย ๆ บริการ
{
"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
คลาสที่กำหนดซึ่งมีอินสแตนซ์ซิงเกิล การอ้างอิงไปยังอินสแตนซ์ที่เทียบเท่ากับ null
JSON ฉันเดาว่าภาษาอื่นสามารถทำสิ่งเดียวกันได้ แน่นอนว่าเราจะต้องตรวจสอบคลาสของวัตถุที่ได้รับก่อนที่จะส่งไปยังคลาสที่สันนิษฐานว่าเป็น "ไร้ค่าที่รับรู้" เหมือนเดิม
Collections.emptyList()
) การทำเช่นนั้นหลีกเลี่ยงข้อบกพร่องอ้างอิงที่เป็นโมฆะซึ่งอาจเป็นความเจ็บปวดได้
Null
คลาส(มีประโยชน์) ได้เนื่องจากคุณจะสามารถกำหนดค่าให้กับออบเจ็กต์ประเภทหรือประเภทของตัวเองObject
เท่านั้น
null
พิจารณาว่าลูกค้าของคุณดีกว่าด้วยสตริงที่ว่างเปล่าหรือnull
- สตริงที่มีคำว่า "โมฆะ" นั้นแยกไม่ออกจากค่าที่ถูกต้องอย่าทำเช่นนั้น