【问题标题】:psql equivalent of pandas .to_dict('index')psql 等效于 pandas .to_dict('index')
【发布时间】:2022-01-04 22:25:09
【问题描述】:

我想返回一个psql表,但是我想以json格式返回。

假设表格看起来像这样......

id name value
1 joe 6
2 bob 3
3 joey 2

但我想将它作为这样的对象返回......

{
  "1": {
    "name": "joe",
    "value": 6
  },
  "2": {
    "name": "bob",
    "value": 3
  },
  "3": {
    "name": "joey",
    "value": 2
  }
}

因此,如果我使用 pandas 执行此操作,并且该表作为数据框存在,我可以像这样对其进行转换...

df.set_index('id').to_dict('index')

但我希望能够在 psql 代码中执行此操作。

我得到的最接近的是做这样的事情

select
  json_build_object (
    id,
    json_build_object (
      'name', name,
      'value', value
    )
  )
from my_table

但不是将这一切聚合到一个对象中,结果是一堆单独的对象,由键级别的行分隔......话虽如此,这有点像......

有什么想法吗?

【问题讨论】:

  • 这是一个similar thread,关于 json 数组输出而不是 json dict。

标签: json postgresql


【解决方案1】:

你想让jsonb_object_agg() 得到这个:

select jsonb_object_agg(id, jsonb_build_object('name', name, 'value', value))
from my_table

但这不适用于任何实际大小的表格。单个值的限制大约为 1GB。因此,对于较大的表(或列内的值),这可能会因内存不足错误而失败

【讨论】:

  • 啊,是的,你是对的.. 我返回的内容相当大,所以这可能是个问题.. 尽管如此,很高兴知道这存在!谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-26
  • 2012-08-22
  • 1970-01-01
  • 1970-01-01
  • 2018-02-06
  • 1970-01-01
相关资源
最近更新 更多