Преобразование JSON из одного формата в другой формат JSON в java

Мне нужно скрыть конкретный ответ JSON и скрыть какой-то другой формат

Для например. Мой ввод JSON похож на

JSON1

[
    {
        "propertyId":10081,
        "roomId":0,
        "startDate":"2018-01-29T00:00:00",
        "endDate":"2018-01-30T00:00:00",
        "priority":1,
        "message":"Test it",
        "id":158,
        "dateModifiedUtc":null
    },
    {
        "propertyId":10081,
        "roomId":10021855,
        "startDate":"2018-01-29T00:00:00",
        "endDate":"2018-01-30T00:00:00",
        "priority":2,
        "message":"Check how it works",
        "id":159,
        "dateModifiedUtc":null
    },
    {
        "propertyId":10081,
        "roomId":10021855,
        "startDate":"2018-01-29T00:00:00",
        "endDate":"2018-01-30T00:00:00",
        "priority":2,
        "message":"Check how it works",
        "id":160,
        "dateModifiedUtc":null
    }
]

Мне нужно заменить некоторые значения для roomId, а затем преобразовать json в формат ниже и отправить его на другую конечную точку.

JSON2

{
    "sitenotification":[
        {
            "roomid":"10601",
            "priority":1,
            "startdate":"2017-08-10T15:50:52+03:00",
            "enddate":"2017-08-15T15:50:52+03:00",
            "sitemessage":"test"
        },
        {
            "roomid":"10601",
            "priority":1,
            "startdate":"2017-08-10T15:50:52+03:00",
            "enddate":"2017-08-15T15:50:52+03:00",
            "customermessage":"test 2"
        }
    ]
}

Я пытался сделать это несколькими способами, такими как десериализация с использованием Джексона и сопоставление его с конкретным классом, как показано ниже.

@JsonIgnoreProperties(ignoreUnknown = true)
public class FatNotificationsAttributesDataModel {

    @JsonProperty("propertyId")
    public int propertyId;
    @JsonProperty("roomId")
    public int roomId;
    @JsonProperty("startDate")
    public String startDate;
    @JsonProperty("endDate")
    public String endDate;
    @JsonProperty("priority")
    public int priority;
    @JsonProperty("message")
    public String message;
    @JsonProperty("id")
    public int id;
    @JsonProperty("dateModifiedUtc")
    public String dateModifiedUtc;

}

а затем снова сериализовать его, используя другой класс

@JsonSerialize(using = CustomSerializer.class)
public class FinalDataModel {

    public int roomId;

    public String startDate;

    public String endDate;

    public int priority;

    public String message;

}

Но почему-то конвертация не работает. Есть ли у нас лучший способ добиться этого?


person spacecraft    schedule 04.04.2018    source источник
comment
не могли бы вы уточнить, что не работает? есть ли какое-либо исключение или результат, который отличается от того, что вы ожидаете получить?   -  person Ruslan Akhundov    schedule 04.04.2018
comment
используйте gson, это облегчит вам жизнь   -  person SteelToe    schedule 04.04.2018
comment
Ваш вклад не обязательно Json. Это массив из Json элементов. Попробуйте десериализовать в ArrayList<FatNotificationsAttributesDataModel> и посмотрите, работает ли это.   -  person Hypnic Jerk    schedule 04.04.2018
comment
Возможный дубликат десериализации json jackson в java-объекты   -  person Hypnic Jerk    schedule 04.04.2018
comment
извините, мое описание было недостаточно хорошим. Я могу десериализовать JSON1 в список, используя что-то вроде этого List‹JsonNode› attribute = node.findValues(attributes); pojo = mapper.convertValue (атрибуты, FatNotificationsAttributesDataModel []. class); . Но я не уверен, как получить JSON2 из списка объектов, я не очень уверен в подходе, которому я следовал.   -  person spacecraft    schedule 04.04.2018
comment
может быть что-то похожее на JOLT API   -  person spacecraft    schedule 04.04.2018


Ответы (2)


Используйте преобразователь толчков. Самый простой и удобный способ конвертировать любой JSON в любой другой формат JSON.

https://jolt-demo.appspot.com/#inception

person Santosh Ganacharya    schedule 11.04.2019

Вы можете добиться этого, используя JSONObject и JSONArray.

//Create a JSON array with your json string
JSONArray array = new JSONArray(jsonString);
JSONArray newArray = new JSONArray();
//loop on your JSONArray elements
for (i=0, i<array.size(),i++) {
    //Get each separate object into a JSONObject
    JSONObject obj = array.getJSONObject(i);
    //let say you want to modify id for example
    obj.put("id", 12345);
    //push the modifyed object into your new array
    newArray.put(obj);
}
//transform the array into a string
String json = newArray.toString();
person xoxel    schedule 04.04.2018
comment
Я попробовал это решение, но, похоже, у меня проблемы с производительностью, когда у нас есть большие наборы данных. - person spacecraft; 05.04.2018
comment
Очевидно, что да, вероятно, есть лучшие решения/библиотеки для больших наборов данных, в конечном итоге вы можете использовать какую-то многопоточность для достижения лучшей производительности, но это зависит от вас. Помните, что решение, которое я дал, основано на том, о чем вы просили. - person xoxel; 05.04.2018
comment
Кроме того, если честно, я сначала подумал, что это было для образовательных целей, поэтому я дал основной ответ, когда переходил к обработке JSON в Java ^^ - person xoxel; 05.04.2018
comment
спасибо, мне не нужно решение, возможно, мне нужен наилучший возможный подход - person spacecraft; 05.04.2018