JSON'da null değerleri döndürmek için tercih edilen yöntem nedir? İlkel için farklı bir tercih var mı?
Örneğin, sunucudaki nesnemin değeri olmayan "myCount" adlı bir Tamsayı varsa, bu değer için en doğru JSON şöyle olur:
{}
veya
{
"myCount": null
}
veya
{
"myCount": 0
}
Dizeler için aynı soru - eğer sunucuda "myString" null dizesi varsa, en iyi JSON:
{}
veya
{
"myString": null
}
veya
{
"myString": ""
}
ya da (Lord bana yardım et)
{
"myString": "null"
}
Koleksiyonların JSON'da boş bir koleksiyon olarak temsil edilmesini seviyorum. Http://jtechies.blogspot.nl/2012/07/item-43-return-empty-arrays-or.html
Boş bir Dizi temsil edilir:
{
"myArray": []
}
EDIT Özeti
'Kişisel tercih' argümanı gerçekçi görünmektedir, ancak kısa bir bakış açısıyla, bir topluluk olarak çok daha fazla sayıda farklı hizmet / kaynak tüketeceğiz. JSON yapısı için sözleşmeler, söz konusu hizmetlerin tüketimini ve yeniden kullanımını normalleştirmeye yardımcı olacaktır. Standart oluşturmaya gelince, Jackson sözleşmelerinin çoğunu birkaç istisna dışında kabul etmenizi öneririm:
- Nesneler ilkellere göre tercih edilir.
- Boş koleksiyonlar null yerine tercih edilir.
- Değeri olmayan nesneler null olarak temsil edilir.
- İlkeller değerlerini döndürür.
Çoğunlukla null değerlere sahip bir JSON nesnesi döndürüyorsanız, birden çok hizmete yeniden düzenleme için bir adayınız olabilir.
{
"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
}
Yukarıdaki JSON, aşağıdaki Java sınıfından oluşturuldu.
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 bağımlılığı:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.3.0</version>
</dependency>
NSNull
tekli bir örneği olan tanımlı bir sınıf vardır. Bu örneğe yapılan başvuru JSON'lara eşdeğerdir null
. Başka bir dilin de aynı şeyi yapabileceğini tahmin ediyorum. Tabii ki, varsayılan sınıfa dökülmeden önce alınan nesnenin sınıfını kontrol etmek gerekir - "null farkında" olduğu gibi.
Collections.emptyList()
Null
sınıfınız olamazdı çünkü değerlerini yalnızca kendi türündeki veya türündeki nesnelere atayabiliyordunuz Object
.
null
, müşterinizin boş dizeyle daha iyi olup olmadığını düşünün ya danull
- "null" kelimesini içeren bir dize geçerli bir değerden ayırt edilemez, bunu yapmayın.