0

鉴于以下情况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 表示。

谢谢

4

1 回答 1

2

您可以使用JsonObject.fieldNames().

JsonArrayIterable<Object>因为它可能包含不同的类型(对象、字符串等)。如果您确信 a JsonArrayonly contains 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));
}
于 2019-06-11T12:26:23.167 回答