输入为如下结构的json串,[{"a": "foo", "b": "bar", "c": "baz"}, {"a": "fo", "b": "ba", "c": "bz"}],使用jmespath语法输出a="fo"的项
时间: 2024-05-09 07:13:19 浏览: 44
使用JMESPath语法输出a="fo"的项的表达式为:`[?a=='fo']`。
该表达式中,`?`表示筛选操作,`a=='fo'`表示只保留属性a的值为"fo"的项,最终结果为:`[{"a": "fo", "b": "ba", "c": "bz"}]`。
如果你使用Python语言,可以使用以下代码实现:
```python
import jmespath
import json
data = '[{"a": "foo", "b": "bar", "c": "baz"}, {"a": "fo", "b": "ba", "c": "bz"}]'
data_list = json.loads(data)
# 使用JMESPath语法输出a="fo"的项
result = jmespath.search('[?a=="fo"]', data_list)
print(result) # [{"a": "fo", "b": "ba", "c": "bz"}]
```
相关问题
select '{"a": {"b":{"c": "foo"}}}'::json#> '{a,b}' 报错
在 PostgreSQL 中,#> 运算符用于从 JSON 对象中提取一个 JSON 字段。在您的查询中,JSON 字段的路径“a,b”是不正确的,因为 JSON 对象“a”中的值不是一个 JSON 对象,而是一个 JSON 字符串。因此,您不能使用 #> 运算符来提取“a,b”路径中的 JSON 字段。
要解决这个问题,您可以使用#>> 运算符来提取 JSON 字符串值,如下所示:
```
SELECT '{"a": {"b":{"c": "foo"}}}'::json#>> '{a,b}';
```
这将返回“{"c": "foo"}”,它是一个 JSON 字符串值。
如果您需要在 JSON 对象中提取一个 JSON 字段,您需要使用一个有效的 JSON 对象路径。在您的示例中,正确的 JSON 对象路径应该是 "{a,b,c}"。如果您使用以下查询,则可以提取 JSON 对象中的“c”字段:
```
SELECT '{"a": {"b":{"c": "foo"}}}'::json#>> '{a,b,c}';
```
这将返回“foo”,它是 JSON 对象中的“c”字段的值。
希望这可以帮助您解决问题。
阅读全文