#java
#java
Вопрос:
Невозможно создать класс java для соответствующей строки Json, поскольку это слишком большой файл json, и он будет динамически меняться.Я был бы рад, если кто-нибудь сможет опубликовать решение. Нужна помощь…. Ниже приведен пример кода:..
public class rough {
public static void main(String[] args) throws IOException {
String jsondata="{"data":[{"MsgType":"BTO","EventType":"901","Role":"Sender","Version":"2.3"}, {"MsgType":"BTO","EventType":"901","Role":"Sender","Version":"2.4"},{"MsgType":"BTO","EventType":"901","Role":"Sender","Version":"2.5"},{"MsgType":"BTO","EventType":"901","Role":"Sender","Version":"2.6"},{"MsgType":"BTO","EventType":"901","Role":"Sender","Version":"2.7"}]}";
ObjectMapper objectMapper=new ObjectMapper();
ValidationProfile profile=objectMapper.readValue(jsondata,ValidationProfile.class);
System.out.println("profile:" profile.toString());
}
public class ValidationProfile {
public List<String> data;
}
}
Комментарии:
1. можете ли вы объяснить, что вы имели в виду
Can not create a java class for the respective Json string
?2. Поскольку текст JSON является динамическим, а не статическим, используйте
readValue()
для синтаксического анализа вMap<String, Object>
, или используйтеreadTree()
вместоreadValue()
.3. в качестве poc я добавил пример кода с небольшой строкой json, на самом деле Json будет в файле, и он слишком большой. Поэтому невозможно создать класс как данные и добавить переменные в виде общедоступной строки MsgType …. и так далее.
4. Андреас — Спасибо за ваш ответ. если я использую Map<String, Object>, json будет в формате как данные в качестве ключа, а полный json будет как значение. Нужно это в виде списка<Строка>
Ответ №1:
Вы пытаетесь десериализовать объект JSON в виде строки JSON. Вы не можете этого сделать.
В качестве простого исправления (но оно не идеально) изменение вашего ValidationProfile
класса на:
public static class ValidationProfile {
public List<Map<String, String>> data;
}
Лучшим подходом является введение соответствующих классов для всей структуры JSON:
public static class ValidationProfile {
private List<Event> data;
// getters
}
public static class Event {
@JsonProperty("MsgType")
private String msgType;
@JsonProperty("EventType")
private String eventType;
@JsonProperty("Role")
private String role;
@JsonProperty("Version")
private String version;
// getters
}
Комментарии:
1. Не удается создать класс, поскольку Json изменяется динамически … и нужен в виде списка<Строка>
2. @Shubho Использование
List<Map<String, String>>
3. или в более общем смысле
List<Map<String, Object>>
4. Строка Json не будет поддерживать ни одну из вышеуказанных коллекций
Ответ №2:
Удаление «данных» из строки Json в начале. сработало для меня.
Профиль JsonNode=ObjectMapper.readTree(jsondata);