我试图围绕用于在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的正确名称。
以下是我的问题:
我们试图评估是否能够安全地将形状"{a, b, c}"
的字符串解析为可以发送到Postgres驱动程序的["a", "b", "c"]
数组。
谢谢你抽出时间回答我。干杯!
发布于 2021-04-20 23:31:31
您的问题似乎是关于数组输入语法,而不是#>运算符本身。PostgreSQL数组是一个通用特性,在JSON上下文之外的许多地方都使用。PostgreSQL数组已记录在案的输入语法。因为PostgreSQL知道#>在其RHS上接受一个字符串数组,所以它知道将构造看作一个字符串数组,而不需要添加强制转换。还有其他方法,例如,您可以用'{a,b,1}'
替换ARRAY['a','b','1']
。
许多驱动程序将提供一种将数组(或数组引用)直接绑定到单个占位符的方法。要想具体地帮助您的司机,您需要识别它。
发布于 2021-04-20 13:58:39
这没有“名称”,因为这完全是由Postgres开发人员“捏造”的。
#>
(或#>>
)运算符只是链接多个->
运算符的缩写。
所以
'{"a": {"b": [1, 2]}}'::jsonb #> '{a,b,1}'
是相同的
(('{"a": {"b": [1, 2]}}'::jsonb -> 'a') -> 'b') -> 1
括号并不是真正必要的,我只是添加了它们,以使第二个->
更明显地使用第一个->
的结果
https://stackoverflow.com/questions/67180223
复制相似问题