python - Json 搜索任意字段

标签 python mysql json

我正在使用 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

Demo

然后您也许可以检查从 Python 代码中的查询返回的值是否为 None

关于python - Json 搜索任意字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43989830/

相关文章:

java - 如何在android中将数组发布到php服务器?

python - Ruby 中的哈希值并将 python 转换为 ruby

python - functools.partialmethod 和 classmethod 的组合

php - Laravel,从末尾选择数据库,但按升序排列

mysql - 关于插入时mysql自动增量行为

java - Spring @JsonIgnore 序列化未按预期工作

ios - 如何在 objective-c 中使用来自本地主机的 json 数据?

python - 写入文本文件的最后一行?

python - matplotlib:删除混合 2D/3D 子图中的 3D 图的空白

没有 where 子句的 MySql 查询运行非常慢(实际上从不给出输出)