我正在尝试使用 GSON 解析如下 JSON 对象:
{
"key1":"someValue",
"key2":{
"anotherKey1":"212586425",
"anotherKey2":"Martin"
}
}
这是代码:
Data data = new Gson().fromJson(json, Data.class);
这是Data
类:
public class Data {
public String key1;
public Map key2; //This will break everything.
}
我所期望的(我是 GSON 的新手)是它会生成 key2
的值作为 Map
对象。
但是,我收到错误Expected BEGIN_OBJECT but was STRING
,这让我认为我正在传递一个String
,而我应该在其中传递一个 JSON 对象。
GSON不是解析我一开始传递的整个JSON字符串吗?所以最终,我希望新的数据源是一个 Map 对象。这可行吗?
最佳答案
让 Gson 来做这项工作。我将数据
定义为
package stackoverflow.questions.q19228349;
public class Data {
@Override
public String toString() {
return "Data [key1=" + key1 + ", key2=" + key2 + "]";
}
public String key1;
public Object key2;
}
然后我可以解析这两种情况的 key2
:
package stackoverflow.questions.q19228349;
import com.google.gson.Gson;
public class Q19228349 {
public static void main(String[] args){
String json =
"{\"key1\":\"someValue\","+
"\"key2\":{ "+
" \"anotherKey1\":\"212586425\","+
" \"anotherKey2\":\"Martin\""+
" }"+
" }";
String json2 =
"{\"key1\":\"someValue\","+
"\"key2\":\"aString\""+
" }";
Gson g = new Gson();
Data d = g.fromJson(json, Data.class);
System.out.println("First: " +d);
Data d2 = g.fromJson(json2, Data.class);
System.out.println("Second: "+d2);
}
}
这是结果:
First: Data [key1=someValue, key2={anotherKey1=212586425, anotherKey2=Martin}] Second: Data [key1=someValue, key2=aString]
关于java - GSON:无法正确解析 JSON 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19228349/