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现场,这是真的,但他们给出的解决方案是不正确的......

你不能只使用 aMap来解析SOURCES字段,因为这个字段确实是一个数组!你有:

"SOURCES": [ ... ]

因为你有方括号[ ],所以你有一个数组!确实有 a Map,但它包含在数组中......

因此,您需要正确解析该字段的是:

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

请注意,我们使用 aMap来允许 的内容SOURCES具有多个未知值,以便此代码不仅可以解析您的 JSON,可以解析以下内容:

"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>>or List<Map<Object, Long>>

于 2013-07-16T05:29:48.827 回答