JSON jsonObject.optString() は文字列 "null" を返す
質問
サーバーとの通信にJSONを使用するAndroidアプリを開発しているのですが、jsonファイルをパースしようとすると変な問題が発生します。
これはサーバーからの私のjsonです
{
"street2": null,
"province": null,
"street1": null,
"postalCode": null,
"country": null,
"city": null
}
Cityの値を取得するために
String city = address.optString("city", "")
を呼び出しています。この状況で私が期待しているのは
city
が空であることを期待しているのですが(そのために optString がここにあるのですね)、実際には文字列 "null" が含まれています。そのため、さらに null- または isEmpty をチェックすると、String にテキストが含まれているため false が返されます。もし私が
address.isNull("city")
を呼び出すとtrueが返され、これは正しいのです。ただし
optString
は失敗します。
この問題については、Google や Stackoverflow で何も見つかりませんでした。私は思ったように、私は本当にそれが起こる可能性があることを理解していない
optString
は私が期待したとおりのことをすると思っていたので、どうしてこのようなことが起こるのか本当に理解できません。誰かここで何が間違っているのか知っていますか?
どのように解決するには?
この問題に遭遇して、quot; Could they really meant this?" と頭をかきむしるのは、あなただけではありません。 しました。 このバグを考慮する しかし、それらはバグ互換であっても、org.jsonの実装と互換性がなければなりませんでした。
考えてみれば、他の Java 環境で実行される同じライブラリを使用する同じコードが Android で異なる動作をする場合、サードパーティのライブラリを使用する際に大きな互換性の問題が発生するため、これは理にかなったことなのです。たとえ意図が善意であり、本当にバグを修正したとしても、まったく新しい事態を引き起こすことになります。
によると AOSP 問題 :
この動作は意図的なものです。私たちは org.json とバグ互換であるようにわざわざ努力しました。org.json が修正された今、私たちのコードも修正する必要があるかどうかは不明です。アプリケーションはこのバギーな動作に依存するようになったかもしれません。
もしこれがあなたを悲しませるのであれば、json.isNull()のようなnullをテストする別のメカニズムを使用することによって回避することをお勧めします。
ここに簡単な方法があります。
/** Return the value mapped by the given key, or {@code null} if not present or null. */
public static String optString(JSONObject json, String key)
{
// http://code.google.com/p/android/issues/detail?id=13830
if (json.isNull(key))
return null;
else
return json.optString(key, null);
}
関連
-
Java:未解決コンパイル問題の解決方法
-
[解決済み] 正しいJSONコンテンツタイプは何ですか?
-
[解決済み] JSONでコメントを使用することはできますか?
-
[解決済み] JavaでInputStreamを読み込んでStringに変換するにはどうすればよいですか?
-
[解決済み] なぜGoogleはJSONレスポンスにwhile(1);を前置するのでしょうか?
-
[解決済み] なぜパスワードにはStringではなくchar[]が好まれるのですか?
-
[解決済み] cURLでJSONデータをPOSTするにはどうすればよいですか?
-
[解決済み] JavaでStringをintに変換するにはどうしたらいいですか?
-
[解決済み] JavaScriptでJSONをきれいに印刷する
-
[解決済み] JSON文字列を安全にオブジェクトに変換する
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
Eclipse の問題 アクセス制限。タイプ 'jfxrt' はAPI解決されていません。
-
アクセス制限です。タイプ 'JPEGCodec' は API ではない ☞My Blog Github ☜ ホームページを見る
-
Javaでよくある構文エラー
-
Solve モジュールのビルドに失敗しました。Error: ENOENT: no such file or directory エラー
-
アノテーション「@Retention」の役割
-
Java appears タイプEを囲むインスタンスがアクセスできない。
-
Server Tomcat v9.0 Server at localhost の起動に失敗しました。
-
代入の左辺は変数でなければならない 解答
-
switch case文のcaseの後の列挙定数は列挙型なし
-
swagger2 モデルが表示されない モデルが見つからない @ApiModel アノテーションが表示されない問題