Доступ к элементам массива в вершинном JsonObject - PullRequest
0 голосов
/ 11 июня 2019

Учитывая следующее io.vertx.core.json.JsonObject:

{
"111":[
 {
   "A":"a1",
 },
 {
   "A":"a2",
 },
 {
   "A":"a3",
 }
],
"222":[
 {
   "A":"a10",
 },
 {
   "A":"a20",
 },
 {
   "A":"a30",
 }
]
}
  1. Поскольку названия внешних элементов, которые содержат массивы (111 и 222), заранее неизвестны,как правильно получить доступ к элементам каждого массива, например,

    {"A": "a1"}

  2. Как только элементы массива станут доступны какколлекция, как эту коллекцию можно превратить в rxJava Observable.Пробовали следующее:

    Список списка = arrayElements.stream (). Collect (Collectors.toList ());

    Observable observable = Observable.fromIterable (list);

Однако проблема в том, что каждый элемент в потоке затем представляется как java.util.LinkedHashMap.Entry, например, A=a1, тогда как требуется сохранить исходное представление Json.

Спасибо

1 Ответ

1 голос
/ 11 июня 2019

Вы можете получить поля объекта с помощью JsonObject.fieldNames().

JsonArray - это Iterable<Object>, поскольку оно может содержать различные типы (объекты, строки и т. Д.).Если вы уверены, что JsonArray содержит только JsonObject, вы можете разыграть это значение.

Вот общий результат:

for (String fieldName : jsonObject.fieldNames()) {
    JsonArray jsonArray = jsonObject.getJsonArray(fieldName);
    Observable<JsonObject> observable = Observable
            .fromIterable(jsonArray)
            .map(JsonObject.class::cast);
    System.out.println("fieldName = " + fieldName);
    observable.subscribe(json -> System.out.println("json = " + json));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...