首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将JSON解析为对象

将JSON解析为对象
EN

Stack Overflow用户
提问于 2017-06-04 22:00:44
回答 1查看 61关注 0票数 1

我试图使用gson解析这个JSON:

代码语言:javascript
运行
复制
{"hvs1":{"16191":[["TestFile3","C",["A"]],["TestFile3","-",["1G","1A"]]],"16193":[["TestFile3","C",["G"]]]},"hvs2":{"25":[["TestFile3","-",["1A"]]]},"outros":{"16423":[["TestFile3","A",["T"]]]}}

进入这个对象

代码语言:javascript
运行
复制
public class Results {

private String regiaoAfetada;
private String posicaoReferencia;
private String nomeDoArquivo;
private String baseAlteradaReferencia;
private List<String> mutacaoEncontrada;

//get and set

}

我的测试课试着实现这一点,但我得到了一个错误。

代码语言:javascript
运行
复制
public class JsonTeste {

  public static void main(String[] args) {

        Gson gson = new Gson();

        try (Reader reader = new FileReader("foobar.json")) {

        Type type = new TypeToken<TreeMap<String, TreeMap>>() {
        }.getType();

        TreeMap<String, TreeMap<String, List<List<List<String>>>>> map = gson.fromJson(reader, type);

        List<Results> listaMutacoes = new ArrayList<Results>();

        for (Entry<String, TreeMap<String, List<List<List<String>>>>> regioesMap : map.entrySet()) {

            TreeMap<String, List<List<List<String>>>> regiaoUm = regioesMap.getValue();

            for (Entry<String, List<List<List<String>>>> regiaoUmResult : regiaoUm.entrySet()) {

                List<List<List<String>>> resultados = regiaoUmResult.getValue();

                for (List<List<String>> list : resultados) {

                    Results resultado = new Results();
                    resultado.setRegiaoAfetada(regioesMap.getKey());
                    resultado.setPosicaoReferencia(regiaoUmResult.getKey());
                    resultado.setNomeDoArquivo(list.get(0).toString());
                    resultado.setBaseAlteradaReferencia(list.get(1).toString());
                    resultado.setMutacaoEncontrada(list.get(2));
                    listaMutacoes.add(resultado);
                }
            }
        }

        } catch (IOException e) {
        e.printStackTrace();
    }

}
}

问题是当我试图解析这个部分时

代码语言:javascript
运行
复制
 [
         "TestFile3",
         "-",
         [
           "1G",
           "1A"
         ]
       ]

因为我有两个字符串和一个数组,所以问题是当我试图将"TestFile3“放到setNomeDoArquivo中时,但是即使我注释了这一行,第二行中也会出现同样的错误。

resultado.setNomeDoArquivo(list.get(0).toString());resultado.setBaseAlteradaReferencia(list.get(1).toString());

java.lang.ClassCastException:不能将java.lang.String转换为java.util.List

你们能帮帮我吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-05 00:07:03

列表( List resultados )是 List<string> List<List<String>>**.When,您可以得到** resultados 的项目,它可以是其中之一。因此,将其泛化为

试试下面的守则:

代码语言:javascript
运行
复制
Gson gson = new Gson();
try (Reader reader = new FileReader("foobar.json")) {
    Type type = new TypeToken<TreeMap<String, TreeMap>>() {
    }.getType();

    TreeMap<String, TreeMap<String, List<List<Object>>>> map = gson.fromJson(reader, type);

    List<Results> listaMutacoes = new ArrayList<>();

    for (Map.Entry<String, TreeMap<String, List<List<Object>>>> regioesMap : map.entrySet()) {

        TreeMap<String, List<List<Object>>> regiaoUm = regioesMap.getValue();

        for (Map.Entry<String, List<List<Object>>> regiaoUmResult : regiaoUm.entrySet()) {

            List<List<Object>> resultados = regiaoUmResult.getValue();

            for (List<Object> list : resultados) {

                System.out.println(list);

                Results resultado = new Results();
                resultado.setRegiaoAfetada(regioesMap.getKey());
                resultado.setPosicaoReferencia(regiaoUmResult.getKey());
                resultado.setNomeDoArquivo((String) list.get(0));
                resultado.setBaseAlteradaReferencia((String) list.get(1));
                resultado.setMutacaoEncontrada((List<String>) list.get(2));
                listaMutacoes.add(resultado);
            }
        }
    }
} catch (Exception e) {
    e.printStackTrace();
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44359219

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档