Json 无法从标量中提取元素-postgresql错误

Json 无法从标量中提取元素-postgresql错误,json,postgresql,Json,Postgresql,我在尝试访问JSON对象中的数据时遇到了这个错误,有人知道是什么导致了这个错误吗 以下是查询: SELECT id, data FROM cities WHERE data->'location'->>'population' = '270816' 这是JSON对象: location": { "population": 270816, "type": "city" } 任何帮助都将不胜感激。谢谢我能够在Postgres 9.3.1中使用这个SELECT。这里有一个例子

我在尝试访问JSON对象中的数据时遇到了这个错误,有人知道是什么导致了这个错误吗

以下是查询:

SELECT id, data FROM cities WHERE data->'location'->>'population' = '270816'
这是JSON对象:

location": {

"population": 270816,
"type": "city"

}

任何帮助都将不胜感激。谢谢

我能够在Postgres 9.3.1中使用这个
SELECT
。这里有一个例子可以说明这一点

以下是我在SQLFIDLE中使用的DDL和
INSERT
语句:

你使用的是什么版本的Postgres?如何插入JSON?您的
城市
表的DDL是多少


它怀疑这可能与您插入JSON数据的方式有关。试着像我在上面的sqlfiddle中所做的那样插入它,看看这是否适合您。i、 e.作为一个纯SQL字符串,但其中包含有效的JSON,放入定义为
JSON

的列中,在Postgres 9.6.6上听起来也有同样的问题。不正确的字符串转义导致了神秘的JSONB行为。使用pgAdmin4

CREATE TABLE json_test (json_data JSONB);
INSERT INTO json_test (json_data) VALUES ('"{\"id\": \"test1\"}"');
INSERT INTO json_test (json_data) VALUES ('{"id": "test2"}');
SELECT json_data, json_data->>'id' as id FROM json_test;
返回以下pgAdmin4输出结果表明pgAdmin4显示有误导性。使用PSQL中的文本显示,情况变得清晰:

db=> CREATE TABLE json_test (json_data JSONB);
CREATE TABLE
db=> INSERT INTO json_test (json_data) VALUES ('"{\"id\": \"test1\"}"');
INSERT 0 1
db=> INSERT INTO json_test (json_data) VALUES ('{"id": "test2"}');
INSERT 0 1
db=> SELECT json_data, json_data->>'id' as id FROM json_test;
       json_data       |  id
-----------------------+-------
 "{\"id\": \"test1\"}" |
 {"id": "test2"}       | test2
(2 rows)

很明显,第一行是作为一个字符串插入的,它看起来像JSON,而不是一个嵌套的JSON对象。

Hi,感谢您的帮助。我使用javascript和sequelize插入数据,数据来自一个包含许多city对象的json文件。当我检查数据库中的数据时,结构与上面显示的一样。当然,没有问题。什么版本的博士后?如果您使用psql并将数据完全像我上面所说的那样插入到一个以完全相同的方式定义的表中,会发生什么?这样行吗?(考虑到它在sqlfiddle中工作,我希望它能工作。)嗨,我使用的是9.3版,当我按你的方式插入数据时,但我已经知道它会工作,因为我以前尝试过,我认为这与sequelize有关,将数据从json文件导入数据库,然后发生了一些事情,导致了这个问题
db=> CREATE TABLE json_test (json_data JSONB);
CREATE TABLE
db=> INSERT INTO json_test (json_data) VALUES ('"{\"id\": \"test1\"}"');
INSERT 0 1
db=> INSERT INTO json_test (json_data) VALUES ('{"id": "test2"}');
INSERT 0 1
db=> SELECT json_data, json_data->>'id' as id FROM json_test;
       json_data       |  id
-----------------------+-------
 "{\"id\": \"test1\"}" |
 {"id": "test2"}       | test2
(2 rows)