web-dev-qa-db-ja.com

JSONにnull値を含める必要があります

結果をJSONとして返すAPIを作成しています。値がnullの場合に結果にキーを含めるかどうかの現在のベストプラクティスはありますか?例えば:

{
    "title":"Foo Bar",
    "author":"Joe Blow",
    "isbn":null
}

または

{
    "title":"Foo Bar",
    "author":"Joe Blow"
}

2番目は小さいので、このスタイルに傾いていますが、好みのスタイルがあるかどうかはわかりません。クライアントの観点からは、両方のスタイルが機能的に同等になるようです。それぞれに賛否両論はありますか?

86
jjathman

2番目の方法は帯域幅を少し節約しますが、それが懸念事項である場合は、JSONをキーで埋める代わりにインデックス付き配列も使用します。明らかに、["Foo Bar","Joe Blow"]は現在のものよりはるかに短いです。

使いやすさの点では、違いはないと思います。どちらの場合も、if(json.isbn)elseにスキップします。通常、null(値なし)とundefined(値なし)を区別する必要はありません。

30

私は、nullを常に明示的に含めることが好きです。プロパティを省略するとあいまいさが残ります。

サーバーとのプロトコルが合意されている限り、上記のいずれかが機能しますが、サーバーからnullを渡すと、APIが後でより柔軟になると思います。

また、javascriptのhasOwnProperty関数を使用すると、さらなる洞察が得られます。

/* if true object DOES contain the property with *some* value */
if( objectFromJSON.hasOwnProperty( "propertyName" ) )

/* if true object DOES contain the property and it has been set to null */
if( jsonObject.propertyName === null )

/* if true object either DOES NOT contain the property
   OR
   object DOES contain the property and it has been set to undefined */
if( jsonObject.propertyName === undefined )
77
rushkeldon

JavaScriptでは、nullundefinedとは非常に異なるものを意味します。

JSON出力には、JSONデータを使用する特定のコンテキストでアプリケーションが使用し必要としているものが反映されている必要があります。

21
Brad

nullundefinedを区別する必要がある場合は、JavaScriptで2つの異なる意味があるため、必ず含める必要があります。 nullは、プロパティが不明または無意味であることを意味し、undefinedはプロパティが存在しないことを意味します。

一方、誰もその区別をする必要がない場合は、先に進んでそれを除外します。

11
Paulpro

JSONをユーザーエクスペリエンスの背後にあるデータとして使用しても違いはないと思います。

ユーザーが手動で何かを編集する必要がある場合、JSON-configファイルに違いが現れます。最初の例を使用する場合、ユーザーに構成に関するヒントを提供します。

0
Alexey Kachalov