我有一些json数据
{
"attributesMappings": [
{
"domainType": "WI",
"attribute": [
{
"staticAttributes": [
{
"attributeName": "test",
"attributeValue": "test",
"required": true
}
]
}
]
},
{
"domainType": "PI",
"attribute": null
}
]
}
我可以使用
读取对象JSONArray vendorData = mainObj.getJSONArray("attributesMappings");
假设我只想获取域类型为“ WI”的对象,我知道可以使用
JSONObject obj = vendorData.getJSONObject(0);
然后我可以执行这些操作,假设我不知道“ WI”将存储在什么索引上,有没有一种获取数据的方法。我知道我们可以遍历数组项并匹配domainType。
我们可以通过某种方式做到这一点,即在getJSONObject中使用“ WI”或类似的方式我可以获得完整的对象。
JSONObject domainType = attributeMappings.getJSONObject("WI");
答案 0 :(得分:0)
AFAIK,搜索JSON对象树没有比迭代更有效的方法。但是与解析对象树的开销相比,搜索的开销实际上很小。
使用基于流的解析器,并对解析事件处理程序进行编码以查找要提取的信息,可能会比“解析为JSONObject”做得更好。如果您要查找的信息临近JSON序列化的开始,则可以通过在搜索到“命中”后立即放弃解析来节省时间。
如果您只搜索JSON,那么故事就此结束。
如果您要重复搜索相同的JSON,则获得更好性能的方法是:
因此,在您的示例中,您可能基于domainType
字段为所有属性映射构建索引。
或者,将所需的信息提取 just 到满足您需求的数据结构中。
周围有一些库,它们等效于XQuery和XPath for JSON。这种方法肯定比编写一堆迭代代码更方便。例如(来自@ cricket_007的评论):
JSONPath查询 [对于您的示例] 为
$.attributesMappings[?(@.domainType == "WI")]
有关更多信息:Query a JSONObject in java
但是,如果您正在寻找更有效的解决方案,我会犹豫是否要使用“ JSON查询”库。