假设我在Postgres中存储了一个名为“data”的JSON字段,如下所示

{
    "CUSTA": {
        "name": "Customer A",
    },
    "CUSTB": {
        "name": "Customer B",
    },
    "CUSTC": {
        "name": "Customer C",
    }
}

如何查询返回包含键“CUSTA”的记录?或者更好的是“CUSTA”的值,也就是“name”:“Customer A”
尝试这样做,但显然我不能使用关键字键
SELECT * FROM invoices WHERE data->>key = 'CUSTA';

最佳答案

select '{
    "CUSTA": {
        "name": "Customer A"
    },
    "CUSTB": {
        "name": "Customer B"
    },
    "CUSTC": {
        "name": "Customer C"
    }
}'::json#>>'{CUSTA}';
           ?column?
------------------------------
 {                           +
         "name": "Customer A"+
     }
(1 row)

注意:name:customer x后面有逗号,这不是正确的json。对于您的查询,您可能会执行以下操作:
select data#>>'{CUSTA}' from invoices;

或者,如果数据还不是json字段:
select data::json#>>'{CUSTA}' from invoices;

我不明白为什么任何发票都会有不止一个客户。
-克

10-07 13:36
查看更多