【问题标题】:How to get data from Json to multiple column如何从 Json 获取数据到多列
【发布时间】:2020-10-05 12:04:19
【问题描述】:

我想选择要提取的内容并将其显示到每一列,我希望得到像这个查询一样的结果,但不想为这样的每一件事都输入这个

Select *,  
metrics::json ->> 'spend',
metrics::json ->> 'impressions',
metrics::json ->> 'clicks'
from t1

this show null,如果我选择将“reach”和“clicks”,...提取到列但不是全部在 json 中,该怎么办?

select * 
from json_to_record('{"reach": 240, "spend": 3.34, "clicks": 10, "frequency": 1.0375}') 
as x(a int, b text, d text, e text)

我推荐这个Stack over flow question

My DEMO

编辑:我的主要问题是:如何选择提取哪个 没有像第二个查询那样提取所有内容?数据有很多行,每行都有json,我可以用Json_to_record吗?

【问题讨论】:

  • 你需要as x(reach int, spend numeric, clicks int, frequency numeric)
  • 我的主要问题是:如何选择提取哪个而不像第二个查询一样提取全部?数据有很多行,每一行都有 json,我可以用 Json_to_record 做到这一点吗? @a_horse_with_no_name
  • 如果不在某一点或另一点明确写入每一列,就无法做到这一点。
  • 我认为在我的另一个问题中,“只需在返回结构中指定您想要的列”stackoverflow.com/questions/64219565/…

标签: sql json postgresql


【解决方案1】:

如果您只想从 JSON 对象中选择部分数据,比如说 4 个键中的 2 个,您可以通过省略 匿名表 声明中的其余键轻松做到这一点。您需要使用 JSON 键作为列名。

select  *
from json_to_record('{"reach": 240, "spend": 3.34, "clicks": 10, "frequency": 1.0375}') 
as x(reach int,  clicks int)

这使您可以轻松获得所需的列。

https://dbfiddle.uk/?rdbms=postgres_11&fiddle=dd39d912f6e696a8ace3670acf606959

【讨论】:

【解决方案2】:

正如 a_horse_with_no_name 所说,在 JSON 中保持 same 记录名称,并在需要时在 select 列表中使用别名。

select 
  reach as a, spend as b, clicks as c, frequency as d
from json_to_record('{"reach": 240, "spend": 3.34, "clicks": 10, "frequency": 1.0375}') 
as x(reach integer, spend numeric, clicks integer, frequency numeric);

【讨论】:

  • 他的问题是标量值为空。你不必写两次列名。
  • 不,他们来就好了。
  • 不,他们没有!检查他的小提琴。有文本标量值的地方都是空的。您还看到列的名称很好。无需再次使用同名别名。 !image
  • @TheFool:你必须在这里“写两次列名”才能得到NULLs。 documentation:“函数 ...json[b]_to_record ...提取与键关联的值其名称与输出行类型的列名称匹配。对象字段不对应任何输出列名将被忽略,不匹配任何对象字段的输出列将用空值填充。”。如果您想要键以外的其他名称,则此答案显示的查询是至少一种解决方案。
  • 我的主要问题是:如何选择提取哪个而不像第二个查询一样提取全部?数据有很多行,每行都有 json,我可以用 Json_to_record 做到这一点吗? @Stefanov.sm
猜你喜欢
  • 1970-01-01
  • 2020-07-06
  • 2018-09-22
  • 2016-10-24
  • 2019-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多