Java 如何使用Gson为这个Json文件设置响应类?
我已经试过解决这个问题,但没有成功。我正在尝试为此Json格式创建Json响应类:Java 如何使用Gson为这个Json文件设置响应类?,java,json,gson,Java,Json,Gson,我已经试过解决这个问题,但没有成功。我正在尝试为此Json格式创建Json响应类: { "Structure1": [ [ "StringValue1", "StringValue2" ], [ "StringValue1", "
{
"Structure1": [
[
"StringValue1",
"StringValue2"
],
[
"StringValue1",
"StringValue2"
]
],
"Structure2": [
[
"StringValue1",
"StringValue2"
]
],
"Structure3": [
[
"StringValue1",
"StringValue2"
]
]
}
以下是我当前的课程:
public class Response {
private HashMap<String, ArrayList<ArrayList<String>>> map = new HashMap<String, ArrayList<ArrayList<String>>>();
public HashMap<String, ArrayList<ArrayList<String>>> getMap() {
return map;
}
public void setFile11Txt(HashMap<String, ArrayList<ArrayList<String>>> map) {
this.map = map;
}
}
返回的映射结果为空,我做错了什么?TypeToken objtype=new-TypeToken(){}.getType();
TypeToken objtype= new TypeToken<Response>() {}.getType();
Response responseobj= new Gson().fromJson(responsestring, objtype);
use Typetoken to parse Gson Object back to original one
Response responseobj=new Gson().fromJson(responsestring,objtype);
使用Typetoken将Gson对象解析回原始对象
您的响应
表示在名为map
的字段中包含HashMap
的对象,但您的JSON只表示map
。您不需要有封闭对象,只需直接反序列化HashMap
HashMap;
类型mapType=newTypeToken(){}.getType();
map=gson.fromJson(响应,mapType);
我建议使用以下代码:
String jsonString = "{\n" +
" \"Structure1\": [\n" +
" [\n" +
" \"StringValue1\",\n" +
" \"StringValue2\"\n" +
" ],\n" +
" [\n" +
" \"StringValue1\",\n" +
" \"StringValue2\"\n" +
" ]\n" +
" ],\n" +
" \"Structure2\": [\n" +
" [\n" +
" \"StringValue1\",\n" +
" \"StringValue2\"\n" +
" ]\n" +
" ],\n" +
" \"Structure3\": [\n" +
" [\n" +
" \"StringValue1\",\n" +
" \"StringValue2\"\n" +
" ]\n" +
" ]\n" +
" }";
Map<String, ArrayList<String>> myMap = gson.fromJson(jsonString, HashMap.class);
String jsonString=“{\n”+
“\“结构1\”:[\n”+
“[\n”+
“\“StringValue1\”,\n”+
“\“StringValue2\”\n”+
“],\n”+
“[\n”+
“\“StringValue1\”,\n”+
“\“StringValue2\”\n”+
“]\n”+
“],\n”+
“\“结构2\”:[\n”+
“[\n”+
“\“StringValue1\”,\n”+
“\“StringValue2\”\n”+
“]\n”+
“],\n”+
“\“结构3\”:[\n”+
“[\n”+
“\“StringValue1\”,\n”+
“\“StringValue2\”\n”+
“]\n”+
“]\n”+
" }";
Map myMap=gson.fromJson(jsonString,HashMap.class);
调试屏幕截图如下所示:
希望这有帮助 Buddy是您的响应字符串提交正确是该位正确检查我发布的应答我的映射仍然为空,我怀疑问题与响应类有关从原始
HashMap
类型转换时存在未经检查的强制转换,可能会导致错误。myMap的类型是Map
,但应该是HashMap
。由于使用了原始类型,编译器在您尝试访问myMap之前不会捕获类型不匹配。例如,List structure1List=myMap.get(“Structure1”).get(0)代码>将无法编译。@noobcode:请接受Igreen的答案而不是我的答案,然后我将在此处删除我的答案:)尽管我们可以使用列表结构1list=myMap.get(“结构1”);ArrayList arrayString=(ArrayList)structure1List.get(1)代码>但是它会导致另一次取消选中强制转换:)完全正确。如果您在回答中将myMap
的类型切换为HashMap
,它可能会满足noobcoder的需要,而不会引发异常,因为它是预期的类型。反序列化到泛型类型(本例中为HashMap)会导致类型信息丢失,因此程序员必须自己管理。如果您保持一切正常,您应该可以,但是如果您能够使用更强的类型,您可以在编译时而不是运行时捕获一些错误,因为编译器可以为您重新检查您的工作。
HashMap<String, ArrayList<ArrayList<String>>> map;
Type mapType = new TypeToken<HashMap<String, ArrayList<ArrayList<String>>>>() {}.getType();
map = gson.fromJson(response, mapType);
String jsonString = "{\n" +
" \"Structure1\": [\n" +
" [\n" +
" \"StringValue1\",\n" +
" \"StringValue2\"\n" +
" ],\n" +
" [\n" +
" \"StringValue1\",\n" +
" \"StringValue2\"\n" +
" ]\n" +
" ],\n" +
" \"Structure2\": [\n" +
" [\n" +
" \"StringValue1\",\n" +
" \"StringValue2\"\n" +
" ]\n" +
" ],\n" +
" \"Structure3\": [\n" +
" [\n" +
" \"StringValue1\",\n" +
" \"StringValue2\"\n" +
" ]\n" +
" ]\n" +
" }";
Map<String, ArrayList<String>> myMap = gson.fromJson(jsonString, HashMap.class);