在Java中解析没有对象名的JSON

时间:2016-03-07 09:27:58

标签: java json

我正在尝试解析这个作为REST API调用响应的JSON。你能帮我把它解析为关键值对吗?

对象名称不存在。还有筑巢。记录之间似乎没有新的界限。

目的是提取这些数据并将其加载到数据库中。

    [
    {
        "cc_emails":["feedback@xyz.com"],
        "fwd_emails":[],
        "reply_cc_emails":["feedback@xyz.com"],
        "fr_escalated":false,
        "spam":false,
        "email_config_id":6000038087,
        "group_id":6000110481,
        "priority":1,
        "requester_id":6010410791,
        "responder_id":6002817857,
        "source":1,
        "company_id":null,
        "status":2,
        "subject":"fare",
        "to_emails":["feedback@xyz.com"],
        "product_id":null,
        "id":45043,
        "type":null,
        "due_by":"2016-03-12T08:58:02Z",
        "fr_due_by":"2016-03-08T08:58:02Z",
        "is_escalated":false,
        "description":"Dear xyze Team,\r\n\r\nWhy r u increased fair again and againasas0mail.gmail.com</a>.<br>\n",
        "custom_fields":
        {
            "category":null,
            "issue":null,
            "route_id":null,
            "phone_number":null,
            "department":null,
            "booking_id":null
        },
        "created_at":"2016-03-07T08:58:02Z",
        "updated_at":"2016-03-07T08:58:03Z",

// ...... repeat

}
]

3 个答案:

答案 0 :(得分:0)

执行此操作的最佳方法是使用http://www.jsonschema2pojo.org/ 在那里输入你的json 将源类型更改为JSON 设置正确的类名和包。 生成的pojo可以直接从json

映射

如果您使用resttemplate命中api,则可以使用getForObject从输出中自动设置pojo。

https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/client/RestTemplate.html#getForObject-java.lang.String-java.lang.Class-java.lang.Object...-

答案 1 :(得分:0)

使用gson,您可以非常简单地完成此操作。

做一个类来匹配json中的字段,如:

    public class Example {
        private List<String> cc_emails;
        private List<String> fwd_emails;
        private List<String> reply_cc_emails;
        private Boolean fr_escalated;
        private Boolean spam;
        private Integer email_config_id;
        ...
        private CustomFields custom_fields;
        private String created_at;
        private String updated_at;

    }

然后你需要做另一个来映射自定义字段

public class CustomFields {

   private String category;
   ...


}

使用json你可以像这样解析它:

Type type = new TypeToken<Collection<Example>>(){}.getType();
new Gson().fromJson(json,type);

你必须向Gson宣读它是一个列表,如果它是一个单一的对象就是这样:

new Gson().fromJson(json,Example.class);

这是我通常采取的方法,也是在日期java.sql.Timestamp类也可能解析它,你需要尝试它。

答案 2 :(得分:-1)

您可以使用Gson(https://github.com/google/gson)或Jackson(https://github.com/FasterXML/jackson)并将其反序列化为地图。

相关问题