我正试图收集有关;数组表示法";(因为没有更好的名字(;选择"/"目标";JSON blob中的键。
我特别讨论的是可以与#>
运算符一起使用的'{a, b, c}'
表示法。
Postgres文档给出了几个使用示例,例如:
'{"a": {"b":{"c": "foo"}}}'::json#>'{a,b}' // {"c": "foo"}
或
'{"a": {"b": [1, 2]}}'::json#>'{a,b,1}' // 2
但除了这些非常基本的例子之外,什么都没有。我甚至找不到这个API的正确名称。
以下是我的问题:
- 你知道关于这个主题的任何合适的文件吗
- 如果没有,除了上面提到的两个非常简单的例子之外,你还知道API的任何功能吗?(意思是:选择深键和选择数组索引(它可以是任何不同的形状吗
我们正在尝试评估是否可以安全地将形状为"{a, b, c}"
的字符串解析为可以发送给Postgres驱动程序的["a", "b", "c"]
数组。
谢谢你花时间回答我。干杯
没有"name";因为这完全是";制成的";由Postgres开发人员开发。
#>
(或#>>
(运算符只是链接多个->
运算符的简写。
所以
'{"a": {"b": [1, 2]}}'::jsonb #> '{a,b,1}'
与相同
(('{"a": {"b": [1, 2]}}'::jsonb -> 'a') -> 'b') -> 1
括号并不是真正必要的,我只是添加了它们,以使第二个->
使用第一个->
的结果更加明显
您的问题似乎是关于数组输入语法,而不是#>操作员本身。PostgreSQL数组是一个通用特性,除了在JSON上下文中使用之外,它在许多地方都有使用。PostgreSQL数组的输入语法有文档记录。由于PostgreSQL知道#>在其RHS上获取一个字符串数组,它知道将该构造视为字符串数组,而无需添加强制转换。还有其他方法,例如,可以用ARRAY['a','b','1']
替换'{a,b,1}'
。
许多驱动程序将提供一种将数组(或数组引用(直接绑定到单个占位符的方法。为了帮助你的司机,你需要识别它。