我在匹配表中有以下数据:
{"Id":1,"Teams":[{"Name":"TeamA","Players":[{"Name":"AAA"},{"Name":"BBB"}]},{"Name":"TeamB","Players":[{"Name":"CCC"},{"Name":"DDD"}]}],"TeamRank":[1,2]}
{"Id":2,"Teams":[{"Name":"TeamA","Players":[{"Name":"CCC"},{"Name":"BBB"}]},{"Name":"TeamB","Players":[{"Name":"AAA"},{"Name":"DDD"}]}],"TeamRank":[1,2]}
Run Code Online (Sandbox Code Playgroud)
最终,我想获得一份独特的团队名单.
以下问题我一直在尝试使用以下方法访问Team Name属性:
SELECT json_array_elements(match->>'Teams') FROM matches
Run Code Online (Sandbox Code Playgroud)
这回来了
ERROR: function json_array_elements(text) does not exist
SQL state: 42883
Hint: No function matches the given name and argument types. You might need to add explicit type casts.
Character: 1560
Run Code Online (Sandbox Code Playgroud)
我也试过json_array_elements(match - >>'Teams':: json)和json_array_elements(to_json(match - >>'Teams'))无济于事.
但是以下查询
SELECT match->>'Teams' FROM matches;
Run Code Online (Sandbox Code Playgroud)
返回
"[{"Name":"TeamA","Players":[{"Name":"AAA"},{"Name":"BBB"}]},{"Name":"TeamB","Players":[{"Name":"CCC"},{"Name":"DDD"}]}]"
"[{"Name":"TeamA","Players":[{"Name":"CCC"},{"Name":"BBB"}]},{"Name":"TeamB","Players":[{"Name":"AAA"},{"Name":"DDD"}]}]"
Run Code Online (Sandbox Code Playgroud)
该->>运营商给你的结果text,但你希望它保持json.使用->它给你的json价值.
参考:http://www.postgresql.org/docs/9.4/static/functions-json.html
我相信操作上的顺序json_array_elements(match->>'Teams'::json)转换Teams到json它运行之前->>.json_array_elements((match->>'Teams')::json)应该工作,但只是一个迂回版本->.
to_json(match->>'Teams')转换为text然后将该文本作为json对象提供给您.它没有解析text回来json.
| 归档时间: |
|
| 查看次数: |
4497 次 |
| 最近记录: |