JSON में शून्य मान लौटाने के लिए पसंदीदा तरीका क्या है? क्या आदिम लोगों के लिए एक अलग प्राथमिकता है?
उदाहरण के लिए, यदि सर्वर पर मेरी वस्तु का कोई मान नहीं के साथ "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": []
}
EDIT सारांश
'व्यक्तिगत वरीयता' तर्क यथार्थवादी लगता है, लेकिन उस पर संक्षिप्त दृष्टि डाली जाती है, एक समुदाय के रूप में हम असमान सेवाओं / स्रोतों की एक बड़ी संख्या का उपभोग करेंगे। 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 निम्न जावा वर्ग से उत्पन्न हुआ था।
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()));
}
}
मावेन निर्भरता:
<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
- "अशक्त" शब्द से युक्त एक स्ट्रिंग एक मान्य मूल्य से अप्रभेद्य है, ऐसा मत करो।