如何将JSONObject强制转换为自定义Java类?

时间:2014-06-15 15:34:07

标签: java json-simple

在Java(using json-simple)中,我已成功解析了使用JSON.stringify在JavaScript中创建的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;
}

5 个答案:

答案 0 :(得分:12)

使用jackson库

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

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

答案 1 :(得分:10)

https://github.com/google/gson添加依赖项并将其用作

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

答案 2 :(得分:4)

有很多图书馆可以做到这一点。这是我的建议。 Here您可以找到图书馆

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>

答案 3 :(得分:3)

Java类的JSON字符串? 你可以试试fastjson:

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

并使用java代码:

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

答案 4 :(得分:2)

更新1/9/2018

自从这个(现在流行的)问题被问到以来已经过去了几年。虽然我仍然同意json-simple是我当时的需要,经过反思,我认为SO社区可以更好地服务于&#34; checkmark&#34;杰克逊解决方案旁边。我今天不接受我自己的回答;杰克逊非常棒!


我认为这个体面的json简单库是文档较差的受害者。如果您没有使用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简单答案。杰克逊看起来很光滑,亚马逊也在他们的SDK for Java中使用它,所以......如果它对AWS足够好......