转换json字段的输入

时间:2018-09-24 10:54:06

标签: sql postgresql

我有如下数据:

[{"key": "key1", "value": "value1"}, {"key": "key2", "value": "value2"}, ...]

我想以以下格式将其保存到jsonb字段中:

{"key1": "value1", "key2": "value2", ...}

是否可以在postgres的{​​{1}}中将初始数组转换为json,或者我唯一的选择是在应用程序中更早地将其转换为json?

2 个答案:

答案 0 :(得分:2)

demo: db<>fiddle

SELECT
    jsonb_object_agg(elem ->> 'key', elem ->> 'value')
FROM (
    SELECT jsonb_array_elements('[{"key": "key1", "value": "value1"}, {"key": "key2", "value": "value2"}]'::jsonb) elem
) s
  1. 将数组元素分别扩展为一行(jsonb_array_elements
  2. 通过提取jsonb_object_agg值作为新键并与key相同,将它们聚合在一起(value

答案 1 :(得分:0)

这与您执行查询以检索数据的方式,所使用的框架...都需要更多信息来解答。

为了格式化json,我将使用map()函数,如下所示:

val query = blacklistControl.select(to_json(struct("Column1","Column2")).alias("value"))
  .writeStream
  .format("kafka")
  .option("checkpointLocation", "/your/empty/directory")
  .option("kafka.bootstrap.servers", "xx.xx.xx.xx:9092")
  .option("kafka.security.protocol","SASL_PLAINTEXT")
  .option("kafka.sasl.kerberos.service.name","kafka")
  .option("topic", "topic_xdr")
  .start()