Преобразовать строку Json в Hashmap из hashmap в java

#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}}