给出以下io.vertx.core.json.JsonObject
:
{
"111":[
{
"A":"a1",
},
{
"A":"a2",
},
{
"A":"a3",
}
],
"222":[
{
"A":"a10",
},
{
"A":"a20",
},
{
"A":"a30",
}
]
}
由于事先不知道包含数组(111
和222
)的外部元素的名称,因此访问每个数组的元素的正确方法是什么,例如
{“ A”:“ a1”}
一旦数组的元素可用作集合,那么如何将该集合转换为rxJava Observable
。
尝试了以下方法:
列表列表= arrayElements.stream()。collect(Collectors.toList());
Observable observable = Observable.fromIterable(list);
但是,问题是流中的每个元素然后都表示为java.util.LinkedHashMap.Entry
,例如A=a1
,而所需的是保留原始Json表示形式。
谢谢
答案 0 :(得分:1)
您可以使用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));
}