我有一个来自服务器的字符串输出,我试图从字符串中提取一些值。
以下是服务器的输出:
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类:
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
我无法找到代码的问题。
答案 0 :(得分:1)
其他答案指出问题出在SOURCES
字段,这是真的,但他们给出的解决方案不正确......
您不能仅使用Map
来解析SOURCES
字段,因为此字段确实是一个数组!你有:
"SOURCES": [ ... ]
由于你有方括号[ ]
,你有一个数组!确实存在Map
,但它包含在数组中......
因此,您需要正确解析该字段的是:
private List<Map<String, int>> SOURCES;
请注意,我们使用Map
来允许SOURCES
的内容包含多个未知值,以便此代码可以解析不仅您的JSON,但类似于:
"SOURCES":[
{ "a":1, "b":2 },
{ "c":3 },
{ "x":99, "y":98, "z":97 }
]
答案 1 :(得分:0)
SOURCES
变量应为Map<String,Long>
,因为在JSON字符串中SOURCES
是键值集合("a":1)
,其中“a”是字符串,1是数字。
希望这有帮助。
答案 2 :(得分:0)
检查
"SOURCES":[
{ "a":1 }
]
这将表示地图列表而不是长列表。
因此,请将List<long>
更改为List<Map<String, Long>>
或List<Map<Object, Long>>
。