Итак, в Java у меня это json Строка:
public static void main(String[] args) {
String stringJson = "{\n" +
"nodes: {\n" +
"Random-key-Here: {\n" +
"name: \"PRO-cnt-elastic2-4-i-0a414518a5b67\",\n" +
"transport_address: \"172.18.7.104:9300\",\n" +
"host: \"189.88.7.884\",\n" +
"ip: \"188.88.8.884:8880\",\n" +
"roles: [\n" +
"\"ingest\"\n" +
"],\n" +
"attributes: {\n" +
"zone: \"us-east-1a\"\n" +
"},\n" +
"tasks: {\n" +
"Random-key-Here: {\n" +
"node: \"-2688888mRPYHywWA\",\n" +
"id: 37202060,\n" +
"type: \"transport\",\n" +
"action: \"indices:data/write/reindex\",\n" +
"status: {\n" +
"total: 4869544,\n" +
"updated: 13920,\n" +
"created: 3654080,\n" +
"deleted: 0\n" +
"},\n" +
"description: \"blaaa\",\n" +
"start_time_in_millis: 1596456902705,\n" +
"running_time_in_nanos: 647855785005,\n" +
"cancellable: true,\n" +
"headers: { }\n" +
"}\n" +
"}\n" +
"}\n" +
"}\n" +
"}";
JsonObject jo = new JsonParser().parse(stringJson).getAsJsonObject();
Set s = jo.get("nodes").getAsJsonObject().entrySet().stream().map(e ->
e.getValue().getAsJsonObject().get("tasks").collect(toSet());
}
Важно : заметка внутри Json, некоторые ключи на самом деле являются случайными строка, которую я не мог знать заранее ... - поэтому я написал их как "Random-key-Here"
Короче: Моя цель - получить номер этого поля, "всего : 4869544 ".
Выше вот что пробовал. Мне удалось получить список, содержащий один объект-член набора, и это «Случайный ключ-здесь» в качестве ключа, а значение - это остальная часть моих вложенных json.
Я подумал, что если бы я повторил тот же лог c, что и сделал, чтобы преодолеть первую вещь «Случайный ключ-здесь», как я сделал с
.entrySet().stream().map(e ->
e.getValue().getAsJsonObject().get("tasks")
, тогда я бы перешел на другой уровень ниже, поэтому вместо «задачи» я написал «статус», и я подумал, что смогу получить остальную часть вложенного json, что с этого момента будет проще ... но вместо этого при этом ничего не возвращается:
jo.get("nodes").getAsJsonObject().entrySet()
.stream()
.map(e -> e.getValue().getAsJsonObject().get("tasks").getAsJsonObject().entrySet()
.stream()
.map(ent-> ent.getValue().getAsJsonObject().get("status").getAsJsonObject().get("total").getAsJsonObject()))
был бы признателен за любую помощь, чтобы добраться до нужной вложенной части: «total: 4869544». и имейте в виду, я не могу просто использовать это:
jo.get("nodes").getAsJsonObject().get("Random-key-Here").getAsJsonObject().get("tasks")
.getAsJsonObject().get("Random-key-Here").getAsJsonObject()
.get("status").getAsJsonObject().get("total").getAsInt()
из-за "Random-key-Here".
Tnx for the helpers!