【问题标题】:JSON value of one JSON in JSON list value of other JSONJSON 列表中一个 JSON 的 JSON 值 另一个 JSON 的值
【发布时间】:2019-05-04 21:02:33
【问题描述】:

在 postgres 上使用 SQLalchemy,我想知道一个 JSON 是否“IN”另一个 JSON,它应该在 JOIN 的 ON 子句中,例如:

SELECT json_1, ... FROM table_1
JOIN
SELECT json_2, ... FROM table_2
ON json_1['b'] IN json_2['b']

例如:

json_1 = {"a": ["123"], "b": ["456", "789"]}
json_2 = {"a": ["123"], "b": ["456"]}

所以我想知道 json_2['b'] 是否在 SQLAlchemy 的 json_1['b'] 中。 不确定 IN 甚至可以在 ON 子句中使用,但可能是 contains 或其他什么?

【问题讨论】:

    标签: python json postgresql sqlalchemy


    【解决方案1】:

    如果数据类型是jsonb,那么我相信PostgreSQL 支持contains 查询来查看一个JSON 是否是另一个JSON 的子集。因此,SQLAlchemy 将支持执行这种类型的SELECT。查看以下链接了解更多详情:

    我还想指出,如果 PostgreSQL 中的数据类型是 json,那么您可能不走运,因为 PostgreSQL 似乎本身并不支持将这些对象相互比较。

    除此之外,您可能会使用 Python 将 JSON 值转换为字符串并执行基于正则表达式的比较 - 但我担心这种方法会失败,因为在下面的示例中,我想您会考虑 @987654331 @ 仍然是 json_1 的子集:

    json_1 = {"a": ["123"], "b": ["789", "456"]}
    json_2 = {"a": ["123"], "b": ["456"]}
    

    除非,否则您可能在subgraph isomorphism problem 的范围内。 networkx 包含 VF2 algorithm 的实现,这可能有助于进行这种比较 - 但这种方法可能很危险。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-08-19
      • 1970-01-01
      • 1970-01-01
      • 2020-12-29
      • 1970-01-01
      • 1970-01-01
      • 2021-04-11
      相关资源
      最近更新 更多