【发布时间】:2016-04-17 03:54:49
【问题描述】:
我在 Postgres 数据库中有一个包含 json 的列
{"predict":[{"method":"A","val":1.2},{"method":"B","val":1.7}]}
我想将两个 val 提取为单独的列。有没有办法在 Postgres 中做到这一点?
【问题讨论】:
标签: postgresql
我在 Postgres 数据库中有一个包含 json 的列
{"predict":[{"method":"A","val":1.2},{"method":"B","val":1.7}]}
我想将两个 val 提取为单独的列。有没有办法在 Postgres 中做到这一点?
【问题讨论】:
标签: postgresql
Postgres 在 9.2 中引入了 JSON types 和 functions and operators。如果您的列是 JSON 类型,您可以使用它们进行提取。
【讨论】:
如果json 始终具有您指定的结构(即一个键“预测”,它包含一个包含两个 JSON 对象的数组,每个对象都有一个“方法”和一个“val”键),那么解决方案很简单:
SELECT ((my_json->'predict')->>0)->'val' AS method_a,
((my_json->'predict')->>1)->'val' AS method_b
FROM my_table;
如果结构可能有所不同,那么您必须告诉我们更多有关它的信息,以便为您提供解决方案。
【讨论】:
ERROR: operator does not exist: json -> unknown Hint: No operator matches the given name and argument type(s). You might need to add explicit type casts.