我有一个数据库,列中有一个 JSON 数组extra_fields
。我需要通过 id 提取一个值。
JSON 看起来像这样,尽管每行的对象数量是随机的:
[
{"id":"1","value":"48768"},
{"id":"2","value" ["String","http:someurl"]},
{"id":"5","value":"somevalue"},
{"id":"6","value":""},
{"id":"8","value":"Op-Ed"},
{"id":"9","value":"8111,13498,15408"},
{"id":"10","value":"30"},
{"id":"11","value":"This is the target string"}
]
我可以提取一个 id 数组:
SELECT extra_fields->>"$[*].id" FROM esqt7_k2_items;
我可以使用以下方法提取一组值:
SELECT extra_fields->>"$[*].value" FROM esqt7_k2_items;
我可以在第 n 个零序对象位置提取单个值:
SELECT extra_fields->>"$[2].value" FROM esqt7_k2_items;
但问题是对象数量可变,我特别需要对象 id = 11 的值。 JSON_EXTRACT 似乎不支持过滤,因为 JSONPATH 的每个变体似乎都失败了。$..[?(@.id=11)].value
作为 JSONPATH 工作,但这(和许多变体)失败:
SELECT extra_fields->"$.[?(@.id=11)].value" FROM esqt7_k2_items; #FAILS
这是一个迁移项目,JSON 内容正是 Joomla 选择实现其额外字段的方式。如果你问我,有点痛苦。