java - 将 JSON 解析为对象

标签 java json gson

我正在尝试使用 gson 解析此 JSON:

{"hvs1":{"16191":[["TestFile3","C",["A"]],["TestFile3","-",["1G","1A"]]],"16193":[["TestFile3","C",["G"]]]},"hvs2":{"25":[["TestFile3","-",["1A"]]]},"outros":{"16423":[["TestFile3","A",["T"]]]}}

进入此对象

public class Results {

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

//get and set

}

我的测试类试图实现这一目标,但我收到了错误。

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();
    }

}
}

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

 [
         "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

你们能帮我吗?

最佳答案

列表 resultadosList<string>List<List<String>> .当您获得resultados的元素时它可以是其中之一。因此,一般将其声明为 List<List<Object>>

尝试以下代码:

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();
}

关于java - 将 JSON 解析为对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44359219/

相关文章:

Java:编写一个抛出任何 RuntimeException 的通用方法

java - 电话资费计算器

java - 涉及线程的c++/Java之间的函数完成信号

Javascript 类构造函数不工作

java - 如何使用 Gson 为该 Json 文件设置响应类?

带有 SimpleDateFormat 的 Gson 转换器

java - 输入内容后修改sql表

Python-值错误: I/O Operation on Closed File Error

arrays - 检查json中的两个数组大小是否相同

java - 设置 POJO 数据的最简单方法