JSONでnull値を返すための推奨メソッドは何ですか?プリミティブの好みは異なりますか?
たとえば、サーバー上のオブジェクトに "myCount"という名前の整数があり、値がない場合、その値の最も適切なJSONは次のようになります。
{}
または
{
"myCount": null
}
または
{
"myCount": 0
}
文字列に対する同じ質問-サーバーにnull文字列「myString」がある場合、最高のJSONです。
{}
または
{
"myString": null
}
または
{
"myString": ""
}
または(主が私を助けて)
{
"myString": "null"
}
コレクションがJSONで空のコレクションとして表されるための規約が好きですhttp://jtechies.blogspot.nl/2012/07/item-43-return-empty-arrays-or.html
空の配列が表されます:
{
"myArray": []
}
要約の編集
「個人的な好み」の議論は現実的であるように見えますが、近視眼的であり、コミュニティーとして、ますます多くの異なるサービス/ソースを消費することになります。JSON構造の規則は、上記のサービスの消費と再利用を正規化するのに役立ちます。標準を確立する限り、いくつかの例外を除いて、ほとんどのジャクソン規約を採用することをお勧めします。
- オブジェクトはプリミティブよりも優先されます。
- 空のコレクションはnullよりも優先されます。
- 値のないオブジェクトはnullとして表されます。
- プリミティブはその値を返します。
ほとんどがnull値の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は、次の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
、シングルトンインスタンスを持つ定義済みクラスがあります。そのインスタンスへの参照は、JSONのと同等null
です。他の言語でも同じことができると思います。もちろん、推定されたクラスにキャストする前に、受け取ったオブジェクトのクラスを確認する必要があります。
Collections.emptyList()
Null
独自のタイプまたはタイプのオブジェクトにのみ値を割り当てることができるため、(有用な)クラスを作成できませんObject
。
null
、クライアントが空の文字列を使用する方がよいかどうかを検討してください。null
「null」という単語を含む文字列は有効な値と区別がつかないので、使用しないでください。