gjson
1. 通配符 ‘#’
1.1 例子
在 gjson 中,井号 # 是一个通配符,用于匹配JSON数组中的所有元素。在你的查询中,# 用于匹配 NetworkAdapterComplexes 数组中的每个元素,然后继续沿着JSON结构的路径。
让我们解释你的查询的各个部分:
-
NetworkAdapterComplexes.#: 这部分使用#通配符,匹配NetworkAdapterComplexes数组中的所有元素。 -
NetworkAdapter.Controllers.0.Links.PCIeDevices.#: 在每个NetworkAdapterComplexes元素中,这一部分继续沿着路径,匹配NetworkAdapter中的Controllers数组的第一个元素,然后匹配Links中的PCIeDevices数组中的所有元素。 -
@odata.id: 最后,这部分用于提取每个匹配元素中的@odata.id字段的值。
所以,整个查询的含义是匹配所有 NetworkAdapterComplexes 元素中第一个 Controllers 元素的 PCIeDevices 数组中的所有 @odata.id 值。
通配符 # 用于简化从JSON数组中提取数据的操作,因为它可以匹配数组中的所有元素而无需知道数组的确切长度。
1.2 在gjson查询数据时,什么时候可以使用通配符‘#’
在 gjson 查询数据时,通配符 # 用于匹配JSON中的数组的所有元素。你可以使用 # 通配符的情况包括但不限于以下情况:
-
提取数组中的所有元素的特定字段值:你可以使用
#通配符来提取JSON数组中所有元素的特定字段的值。例如,提取所有用户的姓名:gjson.Get(jsonData, "users.#.name") -
遍历数组中的元素:你可以使用
#通配符来遍历JSON数组中的元素,并执行一些操作或条件检查。例如,遍历所有订单并执行某些操作:result := gjson.Get(jsonData, "orders.#") result.ForEach(func(key, value gjson.Result) bool { // 在这里执行操作,value 包含了当前元素的值 return true // 返回 true 继续遍历,或返回 false 停止遍历 }) -
深度遍历JSON结构中的数组:当JSON结构嵌套多层并包含多个数组时,你可以使用
#通配符来深度遍历嵌套的数组。例如,深度遍历订单中的商品列表:result := gjson.Get(jsonData, "orders.#.products.#") result.ForEach(func(key, value gjson.Result) bool { // 在这里执行操作,value 包含了当前商品的值 return true }) -
匹配多个嵌套数组中的元素:当你需要从多个嵌套的数组中提取数据时,可以使用
#通配符多次匹配不同的数组。例如,从用户评论中提取所有用户的所有标签:gjson.Get(jsonData, "comments.#.tags.#.label")
总之,# 通配符在 gjson 中非常有用,可以简化提取和遍历JSON数据中的数组元素的操作。它允许你处理未知数组长度和嵌套结构的数据,同时保持查询的灵活性。

浙公网安备 33010602011771号