我正在使用 MySql+Python。我有一个带有 json 字段的 MySql 表。用户可以在 json 对象中存储任意数量的字段。
例如:
{id:12, name:"a", age: 23}
OR
{id:5, distance: 23, distance_unit: "mile"}
以下查询效果很好:
SELECT JSON_EXTRACT(name, "$.id") as name
FROM table
WHERE JSON_EXTRACT(name, "$.id") > 3
但是,它只有在我事先知道字段名称时才有效。有没有办法搜索任意字段?像这样的东西:
def search(json_field)
magic!!!
if (json_field==exist)
return json_value
else:
return "not found"
我不想将所有结果加载到内存中,然后使用 Python 进行搜索,因为这样效率不高。
最佳答案
也许您希望按值搜索 JSON 数据,而不必知道其键(即字段)?
如果是这样,您可以尝试 JSON_SEARCH
功能。如果找到匹配值,它返回键名(字段名),否则返回 NULL
。该函数的第二个参数决定是要对所有 JSON 字段执行搜索还是以第一个匹配结束。
示例:
CREATE TABLE temp1(mydata json);
INSERT INTO temp1 values('{"id":"5", "distance":"23", "age":"23", "distance_unit":"mile"}');
SELECT json_search(mydata, "one", "5") AS success FROM temp1;
-- Returns "$.id"
SELECT json_search(mydata, "all", "23") AS success FROM temp1;
-- Returns ["$.age", "$.distance"]
SELECT json_search(mydata, "all", "99") AS success FROM temp1;
-- Returns NULL
然后您也许可以检查从 Python 代码中的查询返回的值是否为 None
?
关于python - Json 搜索任意字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43989830/