Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to get a part of JSON as a plain text using Jackson

I've got a following JSON from API:

    "hotel_data": {
        "name": "Hotel Name",
        "checkin_checkout_times": {
            "checkin_from": "14:00",
            "checkin_to": "00:00",
            "checkout_from": "",
            "checkout_to": "12:00"
        },
        "default_language": "en",
        "country": "us",
        "currency": "USD",
        "city": "Miami"
    }

I'm using Jackson library to deserialize this JSON to Java object. I don't want to create a special class for checkin_checkout_times object. I just want to get it as a plain text. Like this "checkin_from": "14:00", "checkin_to": "00:00", "checkout_from": "", "checkout_to": "12:00".

In my POJO for hotel_data this checkin_checkout_times should be as a string i.e.:

    @JsonProperty("checkin_checkout_times")
    private String checkinCheckoutTimes

Is this possible to get this part of the JSON as a plain text?

EDIT: Error that I'm getting com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize instance of java.lang.String out of START_OBJECT token at [Source: (String)...

like image 602
Max Gabderakhmanov Avatar asked Jan 27 '23 13:01

Max Gabderakhmanov


1 Answers

Make use of JsonNode.

Just make the following setter for the field checkinCheckoutTimes in your POJO for hotel_data and it should work for you.

public void setCheckinCheckoutTimes(JsonNode node) {
    this.checkinCheckoutTimes = node.toString();
}

Example

String str = "{ \"id\": 1, \"data\": { \"a\": 1 } }";
try {
    System.out.println(new ObjectMapper().readValue(str,Employee.class));
} catch (IOException e) {
    e.printStackTrace();
}

Where Employee is as follows:

class Employee
{
    private int id;
    private String data;

    public Employee() {
    }

    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }

    public String getData() {
        return data;
    }

    public void setData(JsonNode node) {
        this.data = node.toString();
    }

    @Override
    public String toString() {
        return "Employee{" +
                "id=" + id +
                ", data='" + data + '\'' +
                '}';
    }
}

gives the following output:

Employee{id=1, data='{"a":1}'}
like image 106
Pankaj Singhal Avatar answered Jan 31 '23 08:01

Pankaj Singhal