Martin
Martin

Reputation: 481

Create complex json objects using gson

How to create javabean for gson for the below JSON script?

{
    "header": [
        {
            "title": {
                "attempts": 3,
                "required": true
            }
        },
        {
            "on": {
                "next": "abcd",
                "event": "continue"
            }
        },
        {
            "on": {
                "next": "",
                "event": "break"
            }
        }
    ]
}

I'm trying to build the javabean for this JSON output. I'm not able to repeat the fieldname on.

Please suggest any solutions.

Upvotes: 1

Views: 720

Answers (1)

nickb
nickb

Reputation: 59699

You will need multiple classes to accomplish this. I made some assumptions with the naming, but these should suffice:

public class Response {
    private List<Entry> header;

    private class Entry {
        private Title title;
        private On on;
    }

    private class Title {
        int attempts;
        boolean required;
    }

    private class On {
        String next, event;
    }
}

You can test it with a main() method like:

public static void main(String[] args) {
    // The JSON from your post
    String json = "{\"header\":[{\"title\":{\"attempts\":3,\"required\":true}},{\"on\":{\"next\":\"abcd\",\"event\":\"continue\"}},{\"on\":{\"next\":\"\",\"event\":\"break\"}}]}";

    Gson gson = new GsonBuilder().setPrettyPrinting().create();
    Response response = gson.fromJson(json, Response.class);

    System.out.println(response.header.get(0).title.attempts); // 3
    System.out.println(response.header.get(1).on.next); // abcd
    System.out.println(gson.toJson(response)); // Produces the exact same JSON as the original
}

Upvotes: 1

Related Questions