java - 如何将 json 字符串转换为 java 列表?

标签 java json web-services rest

我的应用程序必须使用一个 Web 服务,该服务会生成 json 格式的特定类型的数组。 方法是这样的:

public Unidade[] getUnidades(){
    Session s = ConnectDb.getSession();
    try {
        List<Unidade> lista = new ArrayList<Unidade>(s.createQuery("from Unidade order by unidSigla").list());
        Unidade[] unidades = lista.toArray(new Unidade[0]);
        return unidades;
    } catch (Exception e) {
        e.printStackTrace();
        return null;
    } finally {
        s.close();
    }
}

然后,在我的客户端中,它的消耗方式如下:

    WebResource webResource = client.resource("http://localhost:8080/RestauranteWeb/rest/unidades/");
    ClientResponse response = webResource.accept("application/json").get(ClientResponse.class);
    String output = response.getEntity(String.class);
    System.out.println(output);
    Unidade[] unidades = new Gson().fromJson(output, Unidade[].class);
    System.out.println(unidades);

正确检索 json 字符串,但将其转换为数组时出现以下错误:

{"unidade":[{"unidCodigo":"17","unidSigla":"BOSTA"},{"unidCodigo":"18","unidSigla":"BOSTE"},{"unidCodigo":"13","unidSigla":"bumerangui"},{"unidCodigo":"15","unidSigla":"HHH"},{"unidCodigo":"16","unidSigla":"HHH2"},{"unidCodigo":"6","unidSigla":"papapa"},{"unidCodigo":"9","unidSigla":"pobrena"},{"unidCodigo":"7","unidSigla":"sei la"},{"unidCodigo":"3","unidSigla":"TAÇINHA"},{"unidCodigo":"5","unidSigla":"tanque"},{"unidCodigo":"1","unidSigla":"UNIDADE"},{"unidCodigo":"14","unidSigla":"zerao"}]}
Exception in thread "main" com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2
    at com.google.gson.Gson.fromJson(Gson.java:815)
    at com.google.gson.Gson.fromJson(Gson.java:768)
    at com.google.gson.Gson.fromJson(Gson.java:717)
    at com.google.gson.Gson.fromJson(Gson.java:689)
    at br.mviccari.client.UnidadeClient.main(UnidadeClient.java:40)
Caused by: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2
    at com.google.gson.stream.JsonReader.beginArray(JsonReader.java:338)
    at com.google.gson.internal.bind.ArrayTypeAdapter.read(ArrayTypeAdapter.java:70)
    at com.google.gson.Gson.fromJson(Gson.java:803)
    ... 4 more

我做错了什么?

最佳答案

从数据和错误中可以看出,顶级json类型是一个对象,而不是数组。您实际上拥有的是一个顶级对象,其中包含一个 Unidade 元素数组。你应该为你的顶级类定义这样的东西:

public class UnidadeWrapper {
    public Unidade[] unidade;
}

关于java - 如何将 json 字符串转换为 java 列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18043683/

相关文章:

java - MongoDB 身份验证失败

json - Jackson:忽略父类属性

json - 在powershell中将成员之一作为数组传递给JSON

java - GSON/JSON 单例反序列化

.NET 客户端使用 AXIS 1.4 SSL Webservice 所有异常 "INTERNAL SERVER ERROR"

java - 轻松生成休息服务的解决方案?

java - 如何使用 Web 服务和 EclipseLink 作为 JPA 提供程序更新数据库?

Java PrintWriter 不发送字节数组

java - 如何知道 JVM 因 Segfault 崩溃的原因?

java - 如何在Android中获取带有按钮的项目信息