1

如果父元素既可以是 JSONArray 也可以是 JSONObject,我就不得不麻烦地检索值。为此,我使用 Deepcopy 语法来检索它。如果内部数组中也存在子属性,现在的问题是获得额外的值。

例如:JpathExpression:

$.store..book..innerBook..category

结果是:

[
   "innerReference1",
   "innerBook1Ref1",
   "innerReference2"
]

示例 1 预期结果是:

[
   "innerReference1",
   "innerReference2"
]

示例 1:

{
    "store": {
        "book": [
        {
                "innerBook": [
                    {
                        "category": "innerReference1",
                        "author": "Nigel Rees",
                        "innerBook1": [
                            {
                                "category": "innerBook1Ref1"
                            }
                        ]
                    },
                    {
                        "category": "innerReference2",
                        "author": "Nigel Rees"
                    }
                ]
            }
        ],
        "bicycle": {
            "color": "red",
            "price": 19.95
        }
    },
    "expensive": 10
}

示例 2:

{
    "store": {
        "book": [
        {
                "innerBook": 
                    {
                        "category": "innerReference1",
                        "author": "Nigel Rees",
                        "innerBook1": [
                            {
                                "category": "innerBook1Ref1"
                            }
                        ]
                    }
                
            }
        ],
        "bicycle": {
            "color": "red",
            "price": 19.95
        }
    },
    "expensive": 10
}

示例 2 预期结果是:

[
   "innerReference1"
]
4

1 回答 1

1

然而,有点晚了,我们不需要在遍历数组中的项目..之后使用递归下降;innerBook使用 Jayway,我们可以使用它innerBook[*].category来检索所需的结果,例如 1:

$.store..book..innerBook[*].category

示例 2 需要删除数组访问器:

$.store..book..innerBook.category 

您不能innerBook在一个 JSON 中拥有数组和对象,因为它无效。

如果您有一个 API(或其他)提供具有innerbook数组或对象类型属性的 JSON(这将是一个设计糟糕的 API,因为 API 的全部目的是具有预期的响应),您可以查询两个路径或使类别的访问取决于是否存在innerBook1

$.store.book..innerBook[?(@.innerBook1)]..category

仅返回两个示例

[
   "innerReference1",
   "innerBook1Ref1"
]

在这里在线尝试。

于 2020-11-11T18:17:20.153 回答