如何将gson转换为LinkedHashMap <string,list <string =“”>&gt;?</string,>

时间:2014-07-28 04:40:11

标签: gson retrofit

我是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>>

我该怎么做?

2 个答案:

答案 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类,除非你想手动完成所有这些。常用方法的工作原理如下:

  1. 创建一个与您的JSON格式匹配的Java类,例如:您可以使用此处描述的Java类生成器:http://jsongen.byingtondesign.com/
  2. 使用GsonBuilder从文件中读取Json并将其导入生成的类
  3. 我已经使用了这种方法,并且已经生成的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