#java #json #java-11
#java #json #java-11
Вопрос:
Я новичок в обработке json, ниже приведена строка json, которую отправляют нам наши клиенты, я хочу прочитать эту строку json в hashmap из hasmap, чтобы даже для ключа «Client» / «params» ниже я мог получить доступ к его набору ключей и значений и обработать их.
var incomingMessage =
"{
"dev1":"NULL",
"devkp2":"val",
"compression":"NULL",
"subcode":"P_CODE",
"code":"PEB_USER",
"Client":{
"first_name":"Perf FN 422677",
"client_last_name":"DP_PSL",
"clientid":"780A832",
"email":"DP_PS@airb.com"
},
"clientsrc":"dev.client.notvalid",
"params":{
"Name":"ABC_PR",
"client_ID":"PSL",
"domain":"airb.com"
}
}"
Это мой текущий код, который отлично работает для не вложенных строк json (то есть без Client.params
ключа в приведенной выше строке json):
public static void convertJsonStringToMap(String incomingMessage) {
HashMap<Object, Object> map = new HashMap<Object, Object>();
JSONObject jObject = new JSONObject(incomingMessage);
Iterator<?> keys = jObject.keys();
while (keys.hasNext()) {
String key = (String) keys.next();
String value = jObject.getString(key);
map.put(key, value);
}
for (Map.Entry<Object, Object> entry : map.entrySet()) {
System.out.println("Key = " entry.getKey() ", Value = " entry.getValue());
}
}
Я хочу иметь возможность аналогичным образом читать вложенные ключи, такие как Client
и params
. Я использую jdk11. Я согласен с использованием jackson или Google gson, оба подхода будут работать.
Пожалуйста, помогите мне с обработкой этих вложенных строк json.
Комментарии:
1. Вы могли бы использовать рекурсию, но она завершится неудачей, как только ваш внутренний объект (ы) будет иметь то же
key
самое, и вы добавите его в hasmap.
Ответ №1:
Допустимую строку JSON можно легко преобразовать в карту с помощью Jackson ObjectMapper.
ObjectMapper mapper = new ObjectMapper();
Map<String, Object> parsedMap = mapper.readValue(incomingMessage, Map.class);
Это работает и для вложенных элементов —
public static void main(String[] args) throws IOException {
ObjectMapper mapper = new ObjectMapper();
String someJsonString = "{"
""A":"1","
""B":2,"
""C":"
"{"
""D":"4""
"}"
"}";
Map<String, Object> outputMap = mapper.readValue(someJsonString, Map.class);
System.out.println(outputMap);
}
Вывод:
{A=1, B=2, C={D=4}}