如何将一个JSONObject转换为自定义的Java类?

28

在Java中(使用json-simple),我已成功解析了一个由JavaScript使用JSON.stringify创建的JSON字符串。它看起来像这样:

{"teq":14567,"ver":1,"rev":1234,"cop":15678}

这个字符串存储了一个自定义JavaScript对象的状态,现在我希望将其重新构建为一个纯Java类。由于我是从C#背景开始进入Java领域,所以进展不顺利。:-p 该对象当前以org.json.simple.JSONObject的形式存在,因为这是json-simple从JSONParser.parse()操作中生成的。
我该如何将这个JSONObject强制转换为我的新Java类?(下面是定义...)
public class MyCustomJSObject {
    public int teq;
    public int ver;
    public int rev;
    public int cop;
}

你可能想要了解一下Jackson。 - Robby Cornelissen
我听说过很多关于它的事情,但我选择了json-simple,因为这个库更轻量级。也许更轻量级并不是那么好? - Geek Stocks
更轻意味着您需要自己完成更多工作,例如将JSON映射到类。 - Robby Cornelissen
@GeekStocks 或者 Google 的 Gson - Raghunandan
5个回答

25

https://github.com/google/gson添加依赖项,然后使用如下:

Gson gson= new Gson();
CustomPOJOClass obj = gson.fromJson(jsonObject.toString(),CustomPOJOClass.class);

23

使用Jackson库

    //create ObjectMapper instance
    ObjectMapper objectMapper = new ObjectMapper();

    //convert json string to object
    Employee emp = objectMapper.readValue(jsonData, Employee.class); 

3
我认为用户需要使用JSON-Simple进行转换。 - rajadilipkolli
是的,没错,我当时的需求是JSON-Simple。然而,这个问题变得非常受欢迎,我取消了自己的答案并将勾选标记移到了这里。我认为SO社区通过被引导到Jackson会受益更多。请参见https://dev59.com/UmAf5IYBdhLWcg3w0Vi7#24236703。 - Geek Stocks

8

有很多库可以实现这个功能,这是我的建议。在这里你可以找到这个库。

import com.google.gson.Gson; 

然后执行以下操作:

Gson gson = new Gson();  
Student student = gson.fromJson(jsonStringGoesHere, Student.class);  

Maven 依赖

    <dependency>
        <groupId>com.google.code.gson</groupId>
        <artifactId>gson</artifactId>
        <version>2.2.4</version>
    </dependency>

非常感谢您的回复。如果json-simple无法使用,我将尝试使用Gson。 - Geek Stocks

4

更新 2018 年 1 月 9 日

自从这个(现在很受欢迎的)问题被提出以来,已经过去了几年。虽然我仍然认为 json-simple 是我当时的需求,但经过反思,我认为 SO 社区更适合在 Jackson 解决方案旁边拥有“勾选”标记。今天我取消了对自己答案的接受;Jackson 真的很棒!


我认为这个不错的 json-simple 库是文档不好的受害者。如果您不使用 JSONParser(想象一下!)而是使用此 JSONValue.parse() 方法,所有内容都可以像这样解决:

    //JSONParser parser = new JSONParser(); // DON'T USE THIS
    Object obj = JSONValue.parse("A JSON string - array of objects: [{},{}] - goes here");
    JSONArray arrFilings = (JSONArray)obj;
    System.out.println("We can print one this way...");
    System.out.println(arrFilings.get(5) + "\n");

    System.out.println("We can enumerate the whole array...");
    for(Object objFiling : arrFilings){
        System.out.println(objFiling);
    }
    System.out.println("\n");

    System.out.println("We can access object properties this way...");
    for(Object objFiling : arrFilings){
        JSONObject o = (JSONObject)objFiling; // MUST cast to access .get()
        MyJSObject.fyq = o.get("fyq");
    }
    System.out.println("\n");

感谢所有发表评论的人。关于使用json-simple,目前这是唯一的json-simple答案。Jackson看起来很不错,亚马逊也在他们的Java SDK中使用它,所以......如果对于AWS来说足够好....


2

如何将JSON字符串转换为Java类? 您可以尝试使用fastjson:

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.1.41</version>
</dependency>

并使用Java代码:

MyCustomJSObject object = JSON.parseObject(jsonString,MyCustomJSObject.class); 

既不是Gson也不是Jackson适合我,Fastjson非常好用。 - Ramiro Arizpe Giacomelli

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接