2017-11-21 28 views
1

JSON応答のフィールドの1つは、複数の要素を含む場合はString []、1つの場合はStringです。このように:配列として単一のJSON要素を解析する

"assets": [ 
    "0901d196804adc1c", 
    "0901d196804ebd93", 
    "0901d196804ea5e2" 
] 

"assets": "0901d196804adc1c" 

は理想的には、私は要素のJSON型が文字列であるかのように文字列[]は常に、1つの要素でString []型に変換取得したいと思います。

どうすればいいですか?

+0

(あなたがしたい場合は、それを適応させることができます。これはリストではなく、配列を使用することに注意してください、しかし、効果的なJavaは、アプリケーション層のコードは、配列の上にコレクションAPIを好むべきであると指摘しています。)あなたは "資産"を送ることができる単一の要素:["0901d196804adc1c"] –

+0

これは完全なjson応答ですか? –

答えて

0

サーバー側でレスポンスを編集できない場合:thisの質問と回答を参照してください。状況によく似ています。

レスポンスを編集できる場合は、常に文字列配列(f.e. "assets": ["0901d196804adc1c"])で返信してください。

+0

コメントセクションを使用していくつかのリンクを参照してください。 –

+0

私は50の評判に到着するとき私は:) – dalla92

0

あなたは2つのオプションがあります。

1)は、このような状況に対処するためにgson用のカスタムtype adapter(望ましい解決策)を実装します。

2)Object型のフィールドを定義し、TypeAdapterのAPIを使用する方法についてどのようにランタイム

public static class AssetsContainer{ 
     private Object assets; 

     public List<String> getAssets() { 
      if(assets instanceof List<?>) { 
       return (List<String>) assets; 
      } else if(assets instanceof String){ 
       return Arrays.asList((String) assets); 
      } else { 
       //TODO: handle 
       return null; 
      } 
     } 
    } 
0

で適切な型にキャスト?

Gson gson = new GsonBuilder() 
    .registerTypeAdapterFactory(SingletonListTypeAdapter.FACTORY) 
    .create(); 

以下は、配列型を期待したときに非配列JSONの種類をチェックし、シングルトンJavaのリストにそれらを作るしようとします。あなたはよりもAPIレスポンスを変更することができるかどう