【问题标题】:I am getting the json data from client,i want convert that json data into java object and store into db [duplicate]我从客户端获取 json 数据,我想将该 json 数据转换为 java 对象并存储到 db [重复]
【发布时间】:2018-05-31 15:42:24
【问题描述】:
    Client client = Client.create();
    WebResource webResource = client
            .resource("my url");
    String name = "adn";
    String password = "34";
    String authString = name + ":" + password;
    String authStringEnc = new BASE64Encoder().encode(authString
            .getBytes());
    // System.out.println("Base64 encoded auth string: " +
    // authStringEnc);
    ClientResponse response = webResource.accept("application/json")
            .header("Authorization", "Basic " + authStringEnc)
            .get(ClientResponse.class);

    String output = response.getEntity(String.class);

    System.out.println(output);

我得到这样的o/p

{"counts":[{"college_name":"GPT , Karimngr","college_epass_id":18},
{"college_name":"GPT, Dra","college_epass_id":444},

我想将该 json 数据类型转换为 java 对象,请您提出建议。

【问题讨论】:

    标签: java json rest


    【解决方案1】:

    查看此JAX-RS 示例。

    JAX-RS 是 Java 的内置编组和解组机制。 通过添加简单的基于 XML 的注释,我们可以简单地将 JSON 或 XML 请求转换为 Java POJO 模型,反之亦然。

    以上示例将概述 JAX-RS REST Web 服务的基本用法。


    杰克逊的使用

    ObjectMapper mapper = new ObjectMapper();
    Map<String,Object> map = mapper.readValue(json, Map.class);
    

    你的课程会有点像

    public class CollegeList{
      @JsonProperty("counts")
      public List<College> counts;
    }
    
    
    
     public class College{
         @JsonProperty("college_name") public String college_name;
         @JsonProperty("college_epass_id") public int college_epass_id;
        }
    

    您可以通过

    将json转换为相应的对象
    CollegeList colleges = mapper.readValue(jsonString, CollegeList .class);
    

    分享Reference链接了解更多详情。

    【讨论】:

    • 您好 Rohan,感谢您的建议。但我正在获取 json 数据。我想将该 json 转换为 java 对象。我创建了 pojo 类,我编写了这样的代码
    • //用于将json转换为java对象 Gson gson = new GsonBuilder() .excludeFieldsWithModifiers(Modifier.FINAL, Modifier.TRANSIENT, Modifier.STATIC) .serializeNulls() .create();计数 cou = gson.fromJson(output, Counts.class); String countArrayJson = "[{'college_name':'college__id' {'college_name':'college__id'}]"; ArrayList coun = gson.fromJson(countArrayJson, ArrayList.class); System.out.println(cou); o/p:Counts [College_name=null, College_epass_id=0]
    • 哦,明白了......我之前对你的问题感到困惑。您也可以使用 Jack Son,我已经编辑了 Answer 以添加 Code Snippets 。如果有帮助,请看看。
    • 嗨,rohan,我写了这样的代码 counts[] enums = gson.fromJson(output, counts[].class); System.out.println(枚举); o/p:预期为 BEGIN_ARRAY,但在第 1 行第 2 列是 BEGIN_OBJECT
    • 您能否为此提出任何解决方案
    【解决方案2】:

    查看 Google 的 Gson:http://code.google.com/p/google-gson/

    来自他们的网站:

    Gson gson = new Gson(); // Or use new GsonBuilder().create();
    MyType target2 = gson.fromJson(json, MyType.class); // deserializes json into target2
    

    您只需要使用 json 字符串中的所有字段创建一个 MyType 类(当然是重命名的)。如果您更喜欢手动进行所有解析(也很容易),则在处理数组时可能会变得更复杂一些,请查看 http://www.json.org/ 并下载 Json 解析器对象的 Java 源代码。

    【讨论】:

    • 嗨 Bennani,我写了这样的代码 counts[] enums = gson.fromJson(output, counts[].class); System.out.println(枚举); o/p: 预期为 BEGIN_ARRAY,但在第 1 行第 2 列是 BEGIN_OBJECT - 你能建议任何解决方案吗 -
    【解决方案3】:

    由于你没有具体说明你使用的容器有很多选项,但无论如何你需要创建DTO(数据传输对象类),从JSON中获取数据并放入这个类,然后到数据库。

    最直接的是将响应作为字符串获取并使用Jackson进行解析

    在真正的 java web 项目中,通常使用现代 web 容器,它可以将这样的 JSON 转换为你的 DTO automatically,所以我建议阅读你的容器的文档以开始

    【讨论】:

    • 嗨马克西姆,我写了这样的代码 counts[] enums = gson.fromJson(output, counts[].class); System.out.println(枚举); o/p:预期为 BEGIN_ARRAY,但在第 1 行第 2 列是 BEGIN_OBJECT - 您能否为此提出任何解决方案
    • 好吧,这是另一个单独的问题,但无论如何:您告诉 gson 您期望计数数组,但有一个对象作为响应。您正在等待 [a,b,c],但 {} 来了。对于调试,您可以将其解析为字符串 system.out 并检查您收到的内容。 related
    猜你喜欢
    • 2012-09-19
    • 2019-08-03
    • 2010-12-13
    • 1970-01-01
    • 1970-01-01
    • 2015-05-07
    • 1970-01-01
    • 2016-09-07
    相关资源
    最近更新 更多