1

サーバーから文字列出力があり、文字列からいくつかの値を抽出しようとしています。

サーバーからの出力は次のとおりです。

jsonString =

{
  "MEANING":"reduce",
  "DISPLAY":"",
  "TYPE_CD":1,
  "SELECTED_IND":1,
  "CNT":1,
  "SOURCES":[
              { "a":1 }
            ]
}

コード:

JsonReader reader = new JsonReader(new StringReader(jsonString));
DataObject obj1 = new Gson().fromJson(reader, DataObject.class);

データオブジェクト クラス:

DataObject
{ 
    private int MEANING;
    private int CNT;
    private String TYPE_CD;
    private String DISPLAY;
    private String MEANING;
    private List<Long> SOURCES;

    public String getSourceTypeMeaning()
     {
       return this.MEANING;
     }

    public String getSourceTypeDisplay() 
     {
       return this.DISPLAY;
     }

    public String getSourceTypeCd() 
     {
       return this.TYPE_CD;
     }

    public int getSourceCount() 
     {
       return this.CNT;
     }

    public List<Long> getSourceList() 
     {
       return this.SOURCES;
     }
}

しかし、このエラーが発生します

Expected a string but was BEGIN_OBJECT at line 1 column 132

コードの問題を見つけることができません。

4

3 に答える 3

1

他の回答は、問題が現場にあることを指摘していSOURCESます。それは本当ですが、彼らが提供している解決策は正しくありません...

このフィールドは実際には配列Mapであるため、フィールドを解析するために a だけを使用することはできません! あなたが持っている:SOURCES

"SOURCES": [ ... ]

角括弧が[ ]あるので、配列があります! 確かに がありますがMap、配列に含まれています...

したがって、そのフィールドを正しく解析するために必要なものは次のとおりです。

private List<Map<String, int>> SOURCES;

このコードがJSONだけでなく、次のようなもの解析できるように、 aMapを使用して のコンテンツに複数の不明な値を許可することに注意してください。SOURCES

"SOURCES":[
              { "a":1, "b":2 },
              { "c":3 },
              { "x":99, "y":98, "z":97 }
          ]
于 2013-07-16T11:15:37.987 に答える
0

SOURCES変数は である必要がありますMap<String,Long>。これは、JSON 文字列SOURCESはキーと値のコレクション("a":1)であり、"a" が文字列で 1 が数値であるためです。

お役に立てれば。

于 2013-07-16T05:27:25.003 に答える
0

これをチェックして

"SOURCES":[
              { "a":1 }
 ]

これは、長いリストではなく、マップのリストを表します。

したがって、またはに変更List<long>します。List<Map<String, Long>>List<Map<Object, Long>>

于 2013-07-16T05:29:48.827 に答える