Мне нужно скрыть конкретный ответ 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;
}
Но как-то не работает конвертация. Есть ли у нас лучший способ добиться этого?
используйте gson, это облегчит вашу жизнь
Ваш ввод не обязательно Json. Это массив элементов Json. Попробуйте выполнить десериализацию в ArrayList<FatNotificationsAttributesDataModel> и посмотрите, работает ли это.
Возможный дубликат десериализация джексона json в java-объекты
извините, мое описание было недостаточно хорошим. Я могу десериализовать JSON1 в список, используя что-то вроде этого List <JsonNode> attributes = node.findValues ("attributes"); pojo = mapper.convertValue (атрибуты, FatNotificationsAttributesDataModel []. класс); . Но я не уверен, как получить JSON2 из списка объектов, я не очень уверен в подходе, которому я следовал.
может быть чем-то похожим на JOLT API




Вы можете добиться этого, используя 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();
Я пробовал это решение, но, похоже, у меня проблемы с производительностью, когда у нас большие наборы данных
Очевидно, что да, вероятно, существуют лучшие решения / библиотеки для больших наборов данных, в конечном итоге вы могли бы использовать какую-то многопоточность для достижения лучшей производительности, но это зависит от вас. Помните, что решение, которое я дал, основано на том, о чем вы просили.
Кроме того, честно говоря, я сначала думал, что это было для образовательных целей, поэтому я дал основной ответ при переходе к обработке JSON в Java ^^
спасибо, мне не нужно решение, возможно, мне нужен только лучший подход
Используйте Jolt Convertor. Самый простой и легкий способ конвертировать любой JSON в любой другой формат JSON.
не могли бы вы пояснить, что не работает? есть ли какое-либо исключение или результат, который отличается от того, что вы ожидаете получить?