访问顶点 JsonObject 中的数组元素

Accessing array elements in a vertx JsonObject

给出以下 io.vertx.core.json.JsonObject

{
"111":[
 {
   "A":"a1",
 },
 {
   "A":"a2",
 },
 {
   "A":"a3",
 }
],
"222":[
 {
   "A":"a10",
 },
 {
   "A":"a20",
 },
 {
   "A":"a30",
 }
]
}
  1. 由于事先不知道包含数组(111222)的外部元素的名称,因此访问每个元素的正确方法是什么数组,例如

    {"A":"a1"}

  2. 一旦数组的元素作为集合可用,该集合如何变成 rxJava Observable。 已尝试以下方法:

    List list = arrayElements.stream().collect(Collectors.toList());

    Observable 可观察 = Observable.fromIterable(列表);

但是,问题在于流中的每个元素随后都表示为 java.util.LinkedHashMap.Entry,例如A=a1,而需要的是保留原始 Json 表示。

谢谢

您可以使用 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));
}