Преобразование 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;

}

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

не могли бы вы пояснить, что не работает? есть ли какое-либо исключение или результат, который отличается от того, что вы ожидаете получить?

Ruslan Akhundov 04.04.2018 16:44

используйте gson, это облегчит вашу жизнь

SteelToe 04.04.2018 16:45

Ваш ввод не обязательно Json. Это массив элементов Json. Попробуйте выполнить десериализацию в ArrayList<FatNotificationsAttributesDataModel> и посмотрите, работает ли это.

Hypnic Jerk 04.04.2018 16:47

Возможный дубликат десериализация джексона json в java-объекты

Hypnic Jerk 04.04.2018 16:49

извините, мое описание было недостаточно хорошим. Я могу десериализовать JSON1 в список, используя что-то вроде этого List <JsonNode> attributes = node.findValues ​​("attributes"); pojo = mapper.convertValue (атрибуты, FatNotificationsAttributesDataModel []. класс); . Но я не уверен, как получить JSON2 из списка объектов, я не очень уверен в подходе, которому я следовал.

spacecraft 04.04.2018 21:05

может быть чем-то похожим на JOLT API

spacecraft 04.04.2018 21:28
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
6
5 204
2

Ответы 2

Вы можете добиться этого, используя 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();

Я пробовал это решение, но, похоже, у меня проблемы с производительностью, когда у нас большие наборы данных

spacecraft 05.04.2018 09:41

Очевидно, что да, вероятно, существуют лучшие решения / библиотеки для больших наборов данных, в конечном итоге вы могли бы использовать какую-то многопоточность для достижения лучшей производительности, но это зависит от вас. Помните, что решение, которое я дал, основано на том, о чем вы просили.

xoxel 05.04.2018 10:03

Кроме того, честно говоря, я сначала думал, что это было для образовательных целей, поэтому я дал основной ответ при переходе к обработке JSON в Java ^^

xoxel 05.04.2018 10:07

спасибо, мне не нужно решение, возможно, мне нужен только лучший подход

spacecraft 05.04.2018 15:03

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

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

Другие вопросы по теме