使用DAO实现JSON到Java的转换和映射

使用DAO实现JSON到Java的转换和映射,java,json,jackson,gson,dao,Java,Json,Jackson,Gson,Dao,我有下面的JSON响应,希望转换成Java,然后将数据保存到数据库中 我查看了各种工具,但没有找到合适的解决方案 我做错了什么,但不知道差距在哪里 以下是我的JSON: { "release-1.0": [{ "id": 55, "resourceId": "126", "allGraphs": null, "isChecked": true }, { "id": 56, "resou

我有下面的JSON响应,希望转换成Java,然后将数据保存到数据库中

我查看了各种工具,但没有找到合适的解决方案

我做错了什么,但不知道差距在哪里

以下是我的JSON:

{
    "release-1.0": [{
        "id": 55,
        "resourceId": "126",
        "allGraphs": null,
        "isChecked": true
    }, {
        "id": 56,
        "resourceId": "125",
        "allGraphs": null,
        "isChecked": true
    }, {
        "id": 58,
        "resourceId": "140",
        "allGraphs": null,
        "isChecked": true
    }]
}
下面是我的Java类映射到上面的JSON

@DatabaseTable(tableName = "test_group")
public class TestGroup {
    private List<TestGroup> testGroup;

    public TestGroup() {
        // ORMLite needs a no-arg constructor
    }

    @DatabaseField
    private List<String> test_group_id;

    @DatabaseField
    private String id;

    @DatabaseField
    private String test_details;

    @DatabaseField
    private String graph_id;

    public void setTestGroupID(List<String> testGroupId) {
        this.test_group_id = testGroupId;
    }

    public void setId(String id) {
        this.id = id;
    }

    public void testDetails(String testDetails) {
        this.test_details = testDetails;
    }

    public void setGraphId(String allGraphs) {
        this.graph_id = allGraphs;
    }

    public List<TestGroup> getAllGraphs() {
        return testGroup;
    }
}
请帮忙


提前感谢。

您需要一个周围的容器类来将字段“release-1.0”映射为列表。因为json表达式:
“testcases”:[
引用了一个列表

 // will map to the new field release by name
 private String release;

 // Or mapped by named property
 @JsonProperty("testcases")
 private List<TestGroup> release10 = new ArrayList<TestGroup>();
//将按名称映射到新的字段release
私人字符串释放;
//或按命名属性映射
@JsonProperty(“测试用例”)
private List release10=新的ArrayList();

创建一个包含此字段的类,jackson将绑定一个测试组列表。

您需要一个周围的容器类将字段“release-1.0”映射为列表。因为json表达式:
“testcases”:[
引用了一个列表

 // will map to the new field release by name
 private String release;

 // Or mapped by named property
 @JsonProperty("testcases")
 private List<TestGroup> release10 = new ArrayList<TestGroup>();
//将按名称映射到新的字段release
私人字符串释放;
//或按命名属性映射
@JsonProperty(“测试用例”)
private List release10=新的ArrayList();

创建一个包含此字段的类,jackson将向其绑定一个测试组列表。

错误提示,JSON中的
“release-1.0”
字段是
无法识别的
——也就是说,您的
测试组
类中没有具有该名称的字段

JSON
文件必须与
Class
数据成员匹配:

[
    {
        "id": 55,
        "resourceId": "126",
        "allGraphs": null,
        "isChecked": true
    }, {
        "id": 56,
        "resourceId": "125",
        "allGraphs": null,
        "isChecked": true
    }, {
        "id": 58,
        "resourceId": "140",
        "allGraphs": null,
        "isChecked": true
    }]
]
如果
TestGroup
为:

@DatabaseTable(tableName = "test_group")
public class TestGroup {

    public TestGroup() {
        // ORMLite needs a no-arg constructor
    }

    @DatabaseField
    private String id;

    @DatabaseField
    private String resourceId;

    @DatabaseField
    private String allGraphs;

    @DatabaseField
    private Bollean isChecked;

    // Getters and setters - preferably auto-generated since NAMES MUST MATCH.
}

如错误所示,您的
JSON
中的
“release-1.0”
字段是
无法识别的
——这意味着您的
测试组
类中没有具有该名称的字段

JSON
文件必须与
Class
数据成员匹配:

[
    {
        "id": 55,
        "resourceId": "126",
        "allGraphs": null,
        "isChecked": true
    }, {
        "id": 56,
        "resourceId": "125",
        "allGraphs": null,
        "isChecked": true
    }, {
        "id": 58,
        "resourceId": "140",
        "allGraphs": null,
        "isChecked": true
    }]
]
如果
TestGroup
为:

@DatabaseTable(tableName = "test_group")
public class TestGroup {

    public TestGroup() {
        // ORMLite needs a no-arg constructor
    }

    @DatabaseField
    private String id;

    @DatabaseField
    private String resourceId;

    @DatabaseField
    private String allGraphs;

    @DatabaseField
    private Bollean isChecked;

    // Getters and setters - preferably auto-generated since NAMES MUST MATCH.
}

感谢我更改了JSON,现在它看起来如下:
[{“release”:“release-1.0”,“testcases”:[{“id”:55,“resourceId”:“126”,“allGraphs”:null,“isChecked”:true},{“id”:56,“resourceId”:“125”,“allGraphs”:null,“isChecked”:true},{“id”:58,“resourceId”:“140”,“allGraphs”:null,“isChecked”:true}]
我更新了我的答案:现在你需要一个额外的字段。但它现在应该可以工作了。现在我遇到了异常:
com.fasterxml.jackson.databind.JsonMappingException:无法在[Source:[{“release”:“release-1.0”,“testcases”:[{“id”:55,“resourceId”:“126”,“allGraphs”反序列化org.example.model.TestGroup的实例:null,“isChecked”:true},{“id”:56,“resourceId”:“125”,“allGraphs”:null,“isChecked”:true},{“id”:58,“resourceId”:“140”,“allGraphs”:null,“isChecked”:true}];行:1,列:1]
这是我用于转换的代码:
//将JSON字符串转换为对象映射器映射器=新对象映射器();List testGroup1=mapper.readValue(request.body(),new TypeReference(){});for(TestGroup用户:testGroup1){System.out.println(user.getRelease());}
谢谢我更改了JSON,现在它看起来如下:
[{“release”:“release-1.0”,“testcases”:[{“id”:55,“resourceId”:“126”,“allGraphs”:null,“isChecked”:true},{“id”:56,“resourceId”:“125”,“allGraphs”:null,“isChecked”:true},{“id”:58,“resourceId”:“140”,“allGraphs”:null,“isChecked”:true}]
我更新了我的答案:现在你需要一个额外的字段。但它现在应该可以工作了。现在我遇到了异常:
com.fasterxml.jackson.databind.JsonMappingException:无法在[Source:[{“release”:“release-1.0”,“testcases”:[{“id”:55,“resourceId”:“126”,“allGraphs”反序列化org.example.model.TestGroup的实例:null,“isChecked”:true},{“id”:56,“resourceId”:“125”,“allGraphs”:null,“isChecked”:true},{“id”:58,“resourceId”:“140”,“allGraphs”:null,“isChecked”:true}];行:1,列:1]
这是我用于转换的代码:
//将JSON字符串转换为对象映射器映射器=新对象映射器();List testGroup1=mapper.readValue(request.body(),new TypeReference(){});for(TestGroup用户:testGroup1){System.out.println(user.getRelease());}