Java Разбор Json Массив в другом Json Массив json .простой - PullRequest
0 голосов
/ 19 апреля 2020

Я использую JSON .simple lib и пытаюсь проанализировать JSON ответ HTTP GET. Это работает нормально, но я борюсь с декодированием следующей структуры

"example": [
    {
      "param1": 4.88,
      "param2": 60,
      "param3": [
        {
          "param3_1": 501,
          "param3_2": "Rain",
        }
      ],
    },

Мне удается успешно извлечь param1 и param2 с помощью следующего кода:

            JSONObject jo = (JSONObject) new JSONParser().parse(jsonString);
            JSONArray ja;
            Iterator<Map.Entry> itMap;
            Iterator itArray;

            ja = (JSONArray) jo.get("example");
            if (ja != null) {
                itArray = ja.iterator();
                while (itArray.hasNext()) {
                    ExampleClass e = new ExampleClass();
                    itMap = ((Map) itArray.next()).entrySet().iterator();
                    while (itMap.hasNext()) {
                        Map.Entry pair = itMap.next();
                        switch (pair.getKey().toString()) {
                            case "param1":
                                e.param1 = (double)pair.getValue();
                                break;
                            case "param2":
                                e.param2 = (long)pair.getValue();
                                break;
                            case "param3":
                                .....
                                break;
                            default:
                                break;
           }}}}

Кто-нибудь знает, как настроить итератор для получить значения param3?

1 Ответ

1 голос
/ 19 апреля 2020

Это намного проще, если вы используете библиотеку типа GSON. Однако, если вы продолжите работу sh, то следующий код извлечет содержимое в param3. Это не рекомендуемый способ, так как код должен будет измениться, если атрибуты в узле изменятся.

Поэтому, пожалуйста, попробуйте использовать JSON Parser в следующий раз

                        case "param3":
                        JSONArray jsonArray = ( JSONArray ) pair.getValue();
                        for( Object object : jsonArray )
                        {
                            JSONObject jsonObject = ( JSONObject ) object;
                            jsonObject.keySet().forEach( o ->
                            {
                                if( "param3_1".equalsIgnoreCase( o.toString() ) )
                                {
                                    // extract your value here
                                    long next = ( long ) jsonObject.get( o );
                                    System.out.println( next );
                                }
                                else if( "param3_2".equalsIgnoreCase( o.toString() ) )
                                {
                                    // extract your value here
                                    String next = String.valueOf( jsonObject.get( o ) );
                                    System.out.println( next );
                                }
                            } );
                        }
                        break;

Перейдите по этой ссылке , если вы sh добавите GSON к этому. Это довольно простой и понятный урок

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