【发布时间】:2021-09-06 13:34:56
【问题描述】:
考虑以下查询:
select '"{\"foo\":\"bar\"}"'::json;
这将返回包含 JSON string 的单个元素的单个记录。见:
test=# select json_typeof('"{\"foo\":\"bar\"}"'::json); json_typeof
-------------
string
(1 row)
可以如下提取字符串的内容:
=# select ('"{\"foo\":\"bar\"}"'::json) #>>'{}';
json
---------------
{"foo":"bar"}
(1 row)
从现在开始,结果可以转换为 JSON object:
test=# select json_typeof((('"{\"foo\":\"bar\"}"'::json) #>>'{}')::json);
json_typeof
-------------
object
(1 row)
这种方式看起来很神奇。
我在提取运算符中没有定义路径,但返回的不是我传递的。这似乎没有将索引传递给数组访问器,并返回一个元素。
我担心我会混淆下一个维护者来查看这个逻辑。
有没有更神奇的方法来做到这一点?
【问题讨论】:
-
我不知道你在问什么。是不是您有一列 json 类型的列,并且您希望它呈现为文本,例如
{"foo":"bar"}? -
@Bohemian 我试图尽可能地简化它。这里的实际用例是我有一个
json列错误地包含 json strings 包含引用的 json 对象,而不是 just json 对象。我上面的例子也是一样的:一个json字符串封装的json对象。我可以使用上面的运算符进行提取,但我可以看到它真的很混乱。这不是一个“我被困”的问题,而是一个“帮助我找到更好的方法”的问题。 -
另外,这可能是 postgres 邮件列表的问题。我可以把它漂浮在那里。
-
为什么不存储
'{"foo":"bar"}'直接将 JSON 键/值对存储为转义的 JSON 字符串并没有什么意义。
标签: json postgresql