在vertx JsonObject中访问数组元素

时间:2019-06-11 08:10:46

标签: json rx-java2 vert.x vertx-verticle

给出以下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。 尝试了以下方法:

    列表列表= arrayElements.stream()。collect(Collectors.toList());

    Observable observable = Observable.fromIterable(list);

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

谢谢

1 个答案:

答案 0 :(得分:1)

您可以使用JsonObject.fieldNames()获取对象字段。

JsonArrayIterable<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));
}