gpt4 book ai didi

java - 如何检索特定的 Json 对象,无论其在 Json 中的深度如何?

转载 作者:行者123 更新时间:2023-12-02 15:48:41 25 4
gpt4 key购买 nike

在自动化测试运行期间,我遇到了如下的 JsonObject,我们称之为 jsonObject

{
"434": {
"Test1": {
"id": "0001",
"Name": "John"
}
},
"435": {
"Test2": {
"id": "0002",
"Name": "John"
}
}
}

我想检索 Test1 的 JsonObject和Test2 。我可以像这样检索它:

jsonObject.getJsonObject("434").getJsonObject("Test1");
jsonObject.getJsonObject("435").getJsonObject("Test2");

但是值434435不是常数。当我重新运行测试时,这次可能是一些不同的数字。因此我不知道下次会出现什么而不是 434435

有什么方法可以获取 Test1 的 JsonObject和Test2无论434435 (类似于 jsonObject.someMethod("Test1"); )?

我正在使用javax.json图书馆。

最佳答案

您可以使用 jsonObject.keys() 来获取当前 JSON 对象中所有属性名称的迭代器。这将允许您执行以下操作:

Iterable<String> keys = () -> jsonObject.keys();
List<JSONObject> nestedFilteredObjects = stream(keys.spliterator(), false)
.filter(key -> jsonObject.getJSONObject(key).has("Test"))
.map(key -> jsonObject.getJSONObject(key))
.collect(toList());

当然,您仍然需要为 json 异常添加 try-catch,并考虑当属性不是 json 对象时会发生什么(getJSONObject 将抛出异常)。

类似下面的代码应该可以做到。请记住,我没有测试它,您可以根据您的需求进行调整 - 我不知道您的测试中可能有哪些可能的 json:

private static List<JSONObject> getNestedTestObjects(JSONObject jsonObject) {
@SuppressWarnings("Convert2MethodRef")
Iterable<String> keys = () -> jsonObject.keys();
return stream(keys.spliterator(), false)

.map(key -> object(jsonObject, key))
.filter(object -> object instanceof JSONObject)
.map(object -> (JSONObject) object)

.filter(object -> object.has("Test"))

.map(object -> object(object, "Test"))
.filter(object -> object instanceof JSONObject)
.map(object -> (JSONObject) object)

.collect(toList());
}

private static Object object(JSONObject jsonObject, String key) {
try {
return jsonObject.get(key);
} catch (JSONException e) {
throw new RuntimeException(e);
}
}

关于java - 如何检索特定的 Json 对象,无论其在 Json 中的深度如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32459776/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com