Доступ к элементу JSON с помощью GSON - PullRequest
0 голосов
/ 20 мая 2018

У меня очень большой объект Json, который похож на структуру ниже.

{
    "FDN": [{
        "OT": 1,
        "CL": [{
            "K": [{
                "FID": 348,
                "VAL": "20822548"
            }, {
                "FID": "LANGUAGE_ID",
                "VAL": "FR"
            }]
        }],
        "NK": null,
        "SS": 0,
        "ITID": "NEWS",
        "TSID": 44969007,
        "DT": "20180504123302006"
    }, {
        "OT": 1,
        "CL": [{
            "K": [{
                "FID": 348,
                "VAL": "20822549"
            }, {
                "FID": "LANGUAGE_ID",
                "VAL": "AR"
            }]
        }],
        "NK": null,
        "SS": 0,
        "ITID": "NEWS",
        "TSID": 44969008,
        "DT": "20180504123302007"
    }, {
        "OT": 1,
        "CL": [{
            "K": [{
                "FID": 348,
                "VAL": "20822550"
            }, {
                "FID": "LANGUAGE_ID",
                "VAL": "FR"
            }]
        }],
        "NK": null,
        "SS": 0,
        "ITID": "NEWS",
        "TSID": 44969009,
        "DT": "20180504123302007"
    }, {
        "OT": 1,
        "CL": [{
            "K": [{
                "FID": 348,
                "VAL": "20822551"
            }, {
                "FID": "LANGUAGE_ID",
                "VAL": "AR"
            }]
        }],
        "NK": null,
        "SS": 0,
        "ITID": "NEWS",
        "TSID": 44969010,
        "DT": "20180504123302008"
    }, {
        "OT": 1,
        "CL": [{
            "K": [{
                "FID": 348,
                "VAL": "20822552"
            }, {
                "FID": "LANGUAGE_ID",
                "VAL": "FR"
            }]
        }],
        "NK": null,
        "SS": 0,
        "ITID": "NEWS",
        "TSID": 44969011,
        "DT": "20180504123302009"
    }, {
        "OT": 1,
        "CL": [{
            "K": [{
                "FID": 348,
                "VAL": "20822553"
            }, {
                "FID": "LANGUAGE_ID",
                "VAL": "FR"
            }]
        }],
        "NK": null,
        "SS": 0,
        "ITID": "NEWS",
        "TSID": 44969012,
        "DT": "20180504123302010"
    }, {
        "OT": 1,
        "CL": [{
            "K": [{
                "FID": 348,
                "VAL": "20822554"
            }, {
                "FID": "LANGUAGE_ID",
                "VAL": "FR"
            }]
        }],
        "NK": null,
        "SS": 0,
        "ITID": "NEWS",
        "TSID": 44969013,
        "DT": "20180504123302010"
    }, {
        "OT": 1,
        "CL": [{
            "K": [{
                "FID": 348,
                "VAL": "20822573"
            }, {
                "FID": "LANGUAGE_ID",
                "VAL": "AR"
            }]
        }],
        "NK": null,
        "SS": 0,
        "ITID": "NEWS",
        "TSID": 44969065,
        "DT": "20180504080929368"
    }, {
        "OT": 0,
        "CL": [{
            "K": [{
                "FID": 348,
                "VAL": "20822573"
            }, {
                "FID": "LANGUAGE_ID",
                "VAL": "AR"
            }]
        }],
        "NK": null,
        "SS": 0,
        "ITID": "NEWS",
        "TSID": 44969066,
        "DT": "20180504080929369"
    }, {
        "OT": 1,
        "CL": [{
            "K": [{
                "FID": 348,
                "VAL": "20822574"
            }, {
                "FID": "LANGUAGE_ID",
                "VAL": "AR"
            }]
        }],
        "NK": null,
        "SS": 0,
        "ITID": "NEWS",
        "TSID": 44969067,
        "DT": "20180504082130104"
    }]
}

Я хочу получить все элементы, где Language_ID = "AR", например:

{
   "FID": "LANGUAGE_ID",
   "VAL": "AR"
}

Не могли бы вы показать мне, как это сделать?

Пока мой код:

 JsonArray jsonArray = (JsonArray) convertedObject.get("FDN");
                    System.out.println("jsonArray>" + jsonArray.size());
                    List<JsonElement> CL= new ArrayList<JsonElement>();
                    for(int x=0; x < jsonArray.size(); x++){
                        JsonObject jObject4 = (JsonObject) jsonArray.get(x);   
                        JsonElement e = jObject4.get("CL");                    
                        CL.add(jObject4.get("CL"));
                    }
                    System.out.println("CL>" + CL.get(0));

Я только что напечатал первый элемент, и он выглядит так:

[{"K":[{"FID":2085,"VAL":"148433"},{"FID":"LANGUAGE_ID","VAL":"EN"}]}]

Пожалуйста, покажите мне, как получить доступ к LANGUAGE_ID этих структур.

1 Ответ

0 голосов
/ 20 мая 2018

Вот код для доступа к FID, значение которого «LANGUAGE_ID», а также соответствующий VAL.

public class GSONReading {
    public static void main(String[] a) throws IOException {
        FileReader jsonReader = new FileReader(new File("json.json"));
        Gson gson = new Gson();
        JsonObject jsonObject = gson.fromJson(jsonReader, JsonObject.class);
        JsonArray fdnJsonArray = (JsonArray) jsonObject.get("FDN");
        fdnJsonArray.forEach(jsonElement -> {
            JsonArray clJsonArray = jsonElement.getAsJsonObject().get("CL").getAsJsonArray();
            clJsonArray.forEach(clJsonItem -> {
                JsonArray kJsonArray = clJsonItem.getAsJsonObject().get("K").getAsJsonArray();
                kJsonArray.forEach(kArrayElement -> {
                    String fid = kArrayElement.getAsJsonObject().get("FID").getAsString();
                    if(fid != null && !fid.isEmpty() && fid.equalsIgnoreCase("LANGUAGE_ID")) {
                        String val = kArrayElement.getAsJsonObject().get("VAL").getAsString();
                        System.out.println(fid + ":"+ val);
                    }
                });
            });
        });
    }
}

Вывод:

LANGUAGE_ID:FR
LANGUAGE_ID:AR
LANGUAGE_ID:FR
LANGUAGE_ID:AR
LANGUAGE_ID:FR
LANGUAGE_ID:FR
LANGUAGE_ID:FR
LANGUAGE_ID:AR
LANGUAGE_ID:AR
LANGUAGE_ID:AR

Обратите внимание, что я использую Java 8 forEach для доступа к элементам в массиве или списке.Возможно, вам придется изменить, если вы используете Java 6 или 7

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