使用jsoncol#>>' {key}'之间有什么区别吗?和(jsoncol#>' {key}')::文字?

时间:2015-01-28 18:47:57

标签: postgresql postgresql-9.4

选项1 - 将json提取为文本:jsoncol#>>'{key}'

选项2 - 将json值转换为文本:(jsoncol#>'{key}')::text

有什么不同吗?

1 个答案:

答案 0 :(得分:1)

它们的输出之间存在一些差异:它们处理json(和jsonbjson 'null'和字符串(f.ex。json '"foo"')的值不同:

select j #>> '{key}'        "j #>> '{key}'",
       (j #> '{key}')::text "(j #> '{key}')::text"
from (values (json '{"key":null}'),
                  ('{"key":true}'),
                  ('{"key":false}'),
                  ('{"key":"foo"}'),
                  ('{"key":12.34}'),
                  ('{"key":["array"]}'),
                  ('{"key":{"obj":"ect"}}')) v(j)

将产生:

| j #>> '{key}'   | (j #> '{key}')::text |
+-----------------+----------------------+
| NULL            | 'null'               | --> first is true SQL NULL
| 'true'          | 'true'               |
| 'false'         | 'false'              |
| 'foo'           | '"foo"'              | --> note the quotes
| '12.34'         | '12.34'              |
| '["array"]'     | '["array"]'          |
| '{"obj":"ect"}' | '{"obj":"ect"}'      |

(jsoncol #> '{key}')::text变体始终强制转换到文本,这意味着它将显示其JSON值的文本表示,而jsoncol #>> '{key}'被定义为执行某些转换到文本。