[解決済み] JSONでnullを表現する
質問
JSONでNULL値を返すには、どのような方法が望ましいですか?プリミティブの場合、別の優先順位があるのでしょうか?
例えば、サーバー上の私のオブジェクトに "myCount" という名前のIntegerがあり、値がない場合、その値に対する最も正しい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
空のArrayを表現することになる。
{
"myArray": []
}
EDITの概要
個人的な好み」という主張は現実的であるように思えますが、コミュニティとしてこれまで以上に多くの異種のサービスやソースを消費することになるという点では、近視眼的なものであると言えます。JSONの構造に関する規約は、サービスの消費と再利用を正常化するのに役立つでしょう。標準の確立に関しては、私は、いくつかの例外を除いて、Jacksonの規約のほとんどを採用することを提案します。
- プリミティブよりもオブジェクトが優先されます。
- 空のコレクションは、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>
解決方法は?
それぞれの構文解析を評価してみましょう。
http://jsfiddle.net/brandonscript/Y2dGv/
var json1 = '{}';
var json2 = '{"myCount": null}';
var json3 = '{"myCount": 0}';
var json4 = '{"myString": ""}';
var json5 = '{"myString": "null"}';
var json6 = '{"myArray": []}';
console.log(JSON.parse(json1)); // {}
console.log(JSON.parse(json2)); // {myCount: null}
console.log(JSON.parse(json3)); // {myCount: 0}
console.log(JSON.parse(json4)); // {myString: ""}
console.log(JSON.parse(json5)); // {myString: "null"}
console.log(JSON.parse(json6)); // {myArray: []}
<ブロッククオート
は tl;dr をここで紹介します。
のフラグメントは
json2
変数は、方法
JSON仕様
を
null
を表現する必要があります。しかし、いつものように、それはあなたが何をしているかによります -- 時々、"正しい"やり方があなたの状況に対して常に機能するとは限りません。自分の判断で、十分な情報を得た上で決定してください。
JSON1
{}
これは空のオブジェクトを返します。そこには何のデータもなく、探しているキーが何であれ(それが
myCount
または他の何か)の型は
undefined
.
JSON2
{"myCount": null}
この場合
myCount
は実際に定義されていますが、その値は
null
. これは
ではない
と同じです。
undefined
と
null
というように、どちらかの条件を満たすかどうかをテストする場合、JSON1が失敗するのに対して、これは成功するかもしれません。
を表現する決定的な方法です。
null
につき
JSON仕様
.
JSON3
{"myCount": 0}
この場合、myCountは0ですが、これは
null
と同じではありませんし
false
. もし、条件文の評価が
myCount > 0
であれば、これはあった方がいいかもしれません。さらに、ここの値に基づいて計算を実行するのであれば、0があると便利かもしれません。をテストしようとしているのなら
null
しかし、これは実際には全く機能しない。
JSON4
{"myString": ""}
この場合、空の文字列が表示されます。ここでもJSON2と同様に、定義されてはいるが、空なのです。をテストすることができます。
if (obj.myString == "")
をテストすることはできませんが
null
または
undefined
.
JSON5
{"myString": "null"}
これはおそらく問題になるでしょう。
文字列
の値をnullにします。
obj.myString == "null"
しかし、それは
ない
== null
.
JSON6
{"myArray": []}
これは、あなたの配列が
myArray
は存在するが、それは空である。に対してカウントや評価を行おうとしている場合に便利です。
myArray
. 例えば、あるユーザーが投稿した写真の枚数を評価したいとします。
myArray.length
を返します。
0
: 定義されているが、写真が投稿されていない。
関連
-
[解決済み] 正しいJSONコンテンツタイプは何ですか?
-
[解決済み] JSONでコメントを使用することはできますか?
-
[解決済み] なぜGoogleはJSONレスポンスにwhile(1);を前置するのでしょうか?
-
[解決済み] JavaScriptで空文字列/未定義文字列/null文字列をチェックするにはどうすればよいですか?
-
[解決済み] cURLでJSONデータをPOSTするにはどうすればよいですか?
-
[解決済み] JavaScriptでJSONをきれいに印刷する
-
[解決済み] JavaScriptでNULL、未定義、空白の変数をチェックする標準的な関数はありますか?
-
[解決済み] 変数が「未定義」または「NULL」であるかどうかを判断するにはどうすればよいですか?
-
[解決済み] instanceofを呼び出す前にnullチェックは必要ですか?
-
[解決済み] bashの変数をjqに渡す
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】RestClientException: 適切な HttpMessageConverter が見つかりませんでした。
-
[解決済み] TTLファイルフォーマット - これが何なのかさっぱり分からない
-
ajax return json format Report 500 Internal Server Error
-
[解決済み] GIFをLottie jsonに変換するにはどうしたらいいですか?
-
[解決済み] 複数の配列を持つJSONオブジェクトを作るにはどうしたらいいですか?
-
[解決済み] JSONの二重引用符をエスケープする方法
-
[解決済み] JSONファイルからRにデータをインポートする【重複あり
-
[解決済み] jsonパラメータを含むCurl GETリクエスト
-
[解決済み] Mongo コレクションを JSON 形式にダンプする
-
[解決済み] ASP.NETでWebAPIやMVCを使ってJSONを返す。