Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql PG::InvalidParameterValue:错误:无法从标量中提取元素_Sql_Ruby On Rails_Json_Postgresql - Fatal编程技术网

Sql PG::InvalidParameterValue:错误:无法从标量中提取元素

Sql PG::InvalidParameterValue:错误:无法从标量中提取元素,sql,ruby-on-rails,json,postgresql,Sql,Ruby On Rails,Json,Postgresql,我使用以下查询从JSON列获取数据 SELECT id FROM ( SELECT id,JSON_ARRAY_ELEMENTS(shipment_lot::json) AS js2 FROM file_table WHERE ('shipment_lot') = ('shipment_lot') ) q WHERE js2->> 'invoice_number' LIKE ('%" abc1123"%') 我的Postgresql版本是9.3 JSON列中保存的数据: [{ "

我使用以下查询从JSON列获取数据

SELECT id FROM ( SELECT id,JSON_ARRAY_ELEMENTS(shipment_lot::json) AS js2 FROM file_table WHERE ('shipment_lot') = ('shipment_lot') ) q WHERE js2->> 'invoice_number' LIKE  ('%" abc1123"%')
我的Postgresql版本是9.3

JSON列中保存的数据:

[{ "id"=>2981, "lot_number"=>1, "activate"=>true, "invoice_number"=>"abc1123", "price"=>378.0}]
但是,我遇到了以下错误:

ActiveRecord::StatementInvalid (PG::InvalidParameterValue: ERROR:  cannot extract element from a scalar:
SELECT id FROM 
  ( SELECT id,JSON_ARRAY_ELEMENTS(shipment_lot::json) 
    AS js2 FROM file_heaps 
    WHERE ('shipment_lot') = ('shipment_lot') ) q 
WHERE js2->> 'invoice_number' LIKE  ('%abc1123%'))

如何解决此问题。

您的问题是存储了不正确的JSON

如果您尝试在postgres上运行示例数据,它将不会运行

SELECT ('[{ "id"=>2981, "lot_number"=>1, "activate"=>true, "invoice_number"=>"abc1123", "price"=>378.0}]')::json
这是格式正确的JSON:

SELECT ('[{ "id":2981, "lot_number":1, "activate":true, "invoice_number":"abc1123", "price":378.0}]')::json

您的问题是存储了不正确的JSON

如果您尝试在postgres上运行示例数据,它将不会运行

SELECT ('[{ "id"=>2981, "lot_number"=>1, "activate"=>true, "invoice_number"=>"abc1123", "price"=>378.0}]')::json
这是格式正确的JSON:

SELECT ('[{ "id":2981, "lot_number":1, "activate":true, "invoice_number":"abc1123", "price":378.0}]')::json

这不是有效的JSON,这可能是您的问题。我建议改为使用jsonb列,只需插入一个散列,rails就会在insert/select中将其转换为散列。事实上,这段代码直到昨天还在使用同一个数据集。因此,我非常需要使用相同的查询。这是不可能的,这不是JSON,它永远不能用
:JSON
进行转换,正如您所看到的,我只需要前面提到的查询中的“id”表示无效的JSON,这可能是您的问题。我建议改为使用jsonb列,只需插入一个散列,rails就会在insert/select中将其转换为散列。事实上,这段代码直到昨天还在使用同一个数据集。所以我非常需要使用同一个查询。这是不可能的,这不是JSON,它永远不能用
:JSON
进行转换,正如您所看到的,我只需要上述查询中的“id”