【问题标题】:Query for JSON[] type in postgres在 postgres 中查询 JSON[] 类型
【发布时间】:2023-03-03 19:10:01
【问题描述】:

我在 postgres 中有一个表,其中包含一个 json[] 数据类型的字段。 该列存储的数据结构如下:

[{
    "sym": "BTC",
    "enn": "Bitcoin",
    "fan": "",
    "prc": 7284.46,
    "c24": -4.33,
    "mkc": 124460367747.02,
    "mkp": 0
}, {
    "sym": "ETH",
    "enn": "Ethereum",
    "fan": "",
    "prc": 571.735,
    "c24": -5.23,
    "mkc": 57166582578.235,
    "mkp": 0
}, {
    "sym": "XRP",
    "enn": "Ripple",
    "fan": "",
    "prc": 0.625291,
    "c24": -6.28,
    "mkc": 24539115471.842476,
    "mkp": 0
}, {
    "sym": "BCH",
    "enn": "Bitcoin Cash",
    "fan": "",
    "prc": 1034.65,
    "c24": -7.09,
    "mkc": 17771148400,
    "mkp": 0
}, {
    "sym": "EOS",
    "enn": "EOS",
    "fan": "",
    "prc": 13.2186,
    "c24": -7.95,
    "mkc": 11845841674.9512,
    "mkp": 0
}]

我需要的是使用特定的"sym" 键获取 json。像这样:

{
    "sym": "BTC",
    "enn": "Bitcoin",
    "fan": "",
    "prc": 7284.46,
    "c24": -4.33,
    "mkc": 124460367747.02,
    "mkp": 0
}

我试过了:

select to_json(data)::json ->'sym'->'BTC'from my_table;

但它不起作用。我知道它不起作用,因为我的字段是一个数组,而不是 json 并尝试了这个

select json_array_elements(to_json(data)::json->'sym'->'BTC') from my_table;

但它也不起作用。 有什么帮助吗?

【问题讨论】:

  • 我认为如果你在一个简单的json 列中存储一个“json 数组”会更容易。 JSON 数组对我来说没有意义。

标签: arrays json postgresql


【解决方案1】:

你试过CTE吗?当然还有很多其他方法可以做到这一点,但我发现 CTE 非常优雅且易于阅读。

WITH j AS (
SELECT json_array_elements('[{"sym":"BTC","enn":"Bitcoin","fan":"","prc":7284.46,"c24":-4.33,"mkc":124460367747.02,"mkp":0},{"sym":"ETH","enn":"Ethereum","fan":"","prc":571.735,"c24":-5.23,"mkc":57166582578.235,"mkp":0},{"sym":"XRP","enn":"Ripple","fan":"","prc":0.625291,"c24":-6.28,"mkc":24539115471.842476,"mkp":0},{"sym":"BCH","enn":"Bitcoin Cash","fan":"","prc":1034.65,"c24":-7.09,"mkc":17771148400,"mkp":0},{"sym":"EOS","enn":"EOS","fan":"","prc":13.2186,"c24":-7.95,"mkc":11845841674.9512,"mkp":0}]'::json) AS sym
)
SELECT *
FROM j
WHERE j.sym->>'sym'= 'BTC';

                                              sym                                               
------------------------------------------------------------------------------------------------
 {"sym":"BTC","enn":"Bitcoin","fan":"","prc":7284.46,"c24":-4.33,"mkc":124460367747.02,"mkp":0}
(1 Zeile)

【讨论】:

    猜你喜欢
    • 2014-04-10
    • 2022-01-07
    • 2014-05-05
    • 2017-06-01
    • 2017-01-01
    • 1970-01-01
    • 2016-10-07
    • 2013-09-20
    • 1970-01-01
    相关资源
    最近更新 更多