66033


下記の様なjsonをjacksonのライブラリを使用してobjectに変換したいのです。

[code]

    {
        "jsonrpc": "2.0",
        "result":[
            {
            "hostid": "9999",
            "name": "test",
            "type": "1",
            },
            {
            "hostid": "9998",
            "name": "test2",
            "type": "1",
            }
        ],
        "id": 1
    }
    
[/code]

jacksonのreadValueメソッドを使用してobjectへ変換しようと試みておりますが、

[code]

    TestDto test= mapper.readValue(json, TestDto.class);
    
[/code]

下記のようなエラーとなってしまいます。

[code]

    com.fasterxml.jackson.databind.JsonMappingException: No suitable constructor found for type [simple type, class TestDto$Result]: can not instantiate from JSON object (missing default constructor or creator, or perhaps need to add/enable type information?)
    
[/code]

なお、TestDtoは下記のように宣言しております。

[code]

    public class TestDto {
    
        public String jsonrpc;
    
        public List<Result> result;
    
        public class Result {
            public String hostid;
    
            public String name;
    
            public String type;
        }
        public Integer id;
    }
    
[/code]


CC BY-SA 4.0
2020-04-27T11:02:16.783
66030
2020-04-27T12:52:18.940
2020-04-27T11:30:23.840
3060
31179
question
java json array jackson
入れ子になったjson配列をjacksonのライブラリを使用してobjectに変換したい


`Result` を
[ネストされたクラス](https://docs.oracle.com/javase/tutorial/java/javaOO/nested.html)として定義するなら
`static` にする必要がります。

[code]

    public class TestDto {
        ...
        public static class Result {
            ...
        }
    }
    
[/code]

(なお、強いてネストされたクラスとして定義する必要はなく、 `TestDto` から独立した通常のクラスとして定義しても問題ありません。)

加えて、入力JSONも妥当ではないので修正する必要があります。

[code]

    {
        "jsonrpc": "2.0",
        "result": [
            {
            "hostid": "9999",
            "name": "test",
            "type": "1"
            },
            {
            "hostid": "9998",
            "name": "test2",
            "type": "1"
            }
        ],
        "id": 1
    }
    
[/code]

[差分](https://github.com/yukihane/stackoverflow-qa/compare/b6ba2bde..db72b)


CC BY-SA 4.0
2020-04-27T12:52:18.940
66033
2020-04-27T12:52:18.940
2808
66030
answer