Как получить значения из вложенного JSON в Java? - PullRequest
0 голосов
/ 05 сентября 2018

Я создаю проект с использованием весенней загрузки 2.0.3, в которой мне нужно проанализировать json и получить значения с помощью его ключей. Моя проблема в том, что у меня есть ключ, который присутствует на нескольких уровнях в json, и я хочу получить значение всех его вхождений. Например, ниже приведен объект, который я использую: -

{
  "test": {
    id:1,
    name:"test1",
    class:"test2"
  },
  "boolean": true,
  "color": "#82b92c",
  "null": null,
  "number": 123,
  "object_": {
    "a": "b",
    "c": "d",
    "e": "f",
    "test": {
       id:2,
       name:"test1",
       class:"test2"
    }
  },
  "object": {
    "object": {
       "test": {
          id:3,
          name:"test1",
          class:"test2"
        }
    },
    "test": {
        id:4,
        name:"test1",
        class:"test2"
    }
  },
  "string": "Hello World"
}

Есть четыре вхождения ключа test , теперь я хочу получить все его значения. Подскажите пожалуйста, как мне получить его значения.

Ответы [ 3 ]

0 голосов
/ 05 сентября 2018

Надеюсь, нижеприведенная логика поможет разобрать Json.

public static void main(String[] args) {

    JacksonJsonParser parser= (JacksonJsonParser) JsonParserFactory.getJsonParser();
    Map jsonMap=parser.parseMap("{\"test\":{\"id\":1,\"name\":\"test1\",\"class\":\"test2\"},\"boolean\":true,\"color\":\"#82b92c\",\"null\":null,\"number\":123,\"object_\":{\"a\":\"b\",\"c\":\"d\",\"e\":\"f\",\"test\":{\"id\":2,\"name\":\"test1\",\"class\":\"test2\"}},\"object\":{\"object\":{\"test\":{\"id\":3,\"name\":\"test1\",\"class\":\"test2\"}},\"test\":{\"id\":4,\"name\":\"test1\",\"class\":\"test2\"}},\"string\":\"Hello World\"}");
    getTestDetails(jsonMap);
}

private static void getTestDetails(Map jsonMap) {
    for(Object key:jsonMap.keySet()){

        if("test".equals(key.toString())){
            System.out.println(jsonMap.get(key));
        }else{

            if(jsonMap.get(key) instanceof Map){
                getTestDetails((Map)jsonMap.get(key));
            }
        }


    }
}
0 голосов
/ 05 сентября 2018

Вы можете использовать библиотеку org json для чтения JSON из строки.

https://mvnrepository.com/artifact/org.json/json/20140107

Как только у вас будет баночка на месте.

Ниже кода должны быть напечатаны все файлы с ключом "test"

public static void main(String[] args) {
    String jsonString = "{\"test\": {\"id\":1,\"name\":\"test1\",\"class\":\"test2\"},\"boolean\": true,\"color\": \"#82b92c\",\"null\": null,\"number\": 123,\"object_\": {\"a\": \"b\",\"c\": \"d\",\"e\": \"f\",   \"test\": {   \"id\":2,    \"name\":\"test1\",    \"class\":\"test2\"  }  },  \"object\": {    \"object\": {       \"test\": {    \"id\":3,    \"name\":\"test1\",    \"class\":\"test2\"  }    },    \"test\": {    \"id\":4,    \"name\":\"test1\",    \"class\":\"test2\"  }  },  \"string\": \"Hello World\"}";
    JSONObject json = new JSONObject(jsonString);
    System.out.println(json);
    Iterator keys = json.keys();
    getTestKeyObj(json);
}

public static void getTestKeyObj(JSONObject jsonObj) {
    Iterator keys = jsonObj.keys();
    while( keys.hasNext() ) {
        String key = (String)keys.next();
        if(key.equalsIgnoreCase("test")) {
            System.out.println("Test JSON: "+jsonObj.get(key));
        }else {
            if ( jsonObj.get(key) instanceof JSONObject ) {
                getTestKeyObj((JSONObject) jsonObj.get(key));
            }
        }
    }
}
0 голосов
/ 05 сентября 2018

Если вы используете классы Java DTO в качестве параметров метода контроллера (так что Spring Boot автоматически выполняет преобразование), у вас будут вложенные DTO для вложенных объектов JSON.

Примерно так в вашем случае:

public class TestDto { 
    int id;
    String name;
    String clazz; //can't use class as it is reserved keyword
}

public class Body {
    TestDto test;
}

Кстати, я не думаю, что несколько test ключей являются действительными JSON.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...