我是gson的新手,我想知道如何将json数据转换为LinkedHashMap<String, List<String>>
我的json数据显示如下:
{ "data":
{
"data1": ["asdf", "qwer"],
"data2": ["xczv", "aweqrfds123", "sfdgq234"],
"data3": ["dsafasd", "xcvr123", "sdfa324123"]
}
}
data
的json数据的字段名称是动态的,因此我想将data
的json数据转换为LinkedHashMap<String, List<String>>
我该怎么做?
答案 0 :(得分:2)
您可以使用TypeToken
将其转换为Gson#fromJson(Reader,Type)
根据JSON字符串,它是LinkedHashMap<String,LinkedHashMap<String,ArrayList<String>>>
示例代码:
BufferedReader reader = new BufferedReader(new FileReader(new File("json.txt")));
Type type = new TypeToken<LinkedHashMap<String,LinkedHashMap<String,ArrayList<String>>>>() {}.getType();
LinkedHashMap<String,LinkedHashMap<String,ArrayList<String>>> data = new Gson().fromJson(reader, type);
LinkedHashMap<String,ArrayList<String>> innerMap = data.get("data");
System.out.println(new GsonBuilder().setPrettyPrinting().create().toJson(innerMap));
答案 1 :(得分:0)
这不是它在Gson世界中的运作方式 - 你可以将JSON转换为你想要的任何 Java类,除非你想手动完成所有这些。常用方法的工作原理如下:
我已经使用了这种方法,并且已经生成的Java文件(在我修复了您的初始JSON中的次要语法错误之后)看起来像这样:
package com.json;
import java.util.List;
public class Data{
private List data1;
private List data2;
private List data3;
public List getData1(){
return this.data1;
}
public void setData1(List data1){
this.data1 = data1;
}
public List getData2(){
return this.data2;
}
public void setData2(List data2){
this.data2 = data2;
}
public List getData3(){
return this.data3;
}
public void setData3(List data3){
this.data3 = data3;
}
}
要开始使用新创建的类,您可以使用以下模板:
is = new InputStreamReader(new FileInputStream(new File('<path-to-json>')), "UTF-8")/;
Gson gson = new GsonBuilder().create();
Data d = gson.fromJson(is, Data.class);
// Start using your d instance here