73

サーバー通信に JSON を使用する Android アプリを開発していますが、json ファイルを解析しようとすると奇妙な問題が発生します。

これはサーバーからの私のjsonです

{
    "street2": null,
    "province": null,
    "street1": null,
    "postalCode": null,
    "country": null,
    "city": null
}

String city = address.optString("city", "")アドレスの Json-objectを呼び出して、City の値を取得しています。この状況では、私はcity空であることを期待しています (それが optString の目的ですよね?) が、実際には文字列 "null" が含まれています。そのため、文字列にテキストが含まれているため、さらに null または isEmpty チェックを行うと false が返されます。私が呼び出すaddress.isNull("city")と、正しい true が返されます。optString失敗するだけです。

この問題については、Google または Stackoverflow で何も見つかりませんでした。optString私が期待したことを正確に行うと思っていたので、それがどのように起こるかはよくわかりません。ここで何が問題なのか知っている人はいますか?

4

9 に答える 9

25

基本的に 2 つの選択肢があります。

1) null 値を含む JSON ペイロードを送信する

{
"street2": "s2",
"province": "p1",
"street1": null,
"postalCode": null,
"country": null,
"city": null
}

null 値を確認し、それに応じて解析する必要があります。

private String optString_1(final JSONObject json, final String key) {
    return json.isNull(key) ? null : json.optString(key);
}

2) null 値を持つキーを送信せず、直接 optString(key, null) を使用します (帯域幅を節約する必要があります)。

{
"street2": "s2",
"province": "p1"
}
于 2013-08-14T22:09:55.483 に答える