我目前正在使用Cassandra-Ruby驱动程序将JSON文件中的数据插入到我数据库中的现有表中。
JSON文件如下所示:
[
{
"id": "123",
"destination": "234",
"type": "equipment",
"support": "type 1",
"test": "test1"
},
{
"id": "234",
"destination": "123",
"type": "equipment",
"support": "type 1",
"test": "test1"
}
]
我正在读这样的文件:
file = File.read('itemType.json')
data_hash = JSON.parse(file) #return an array of hashes
遍历数组并获取每个哈希值 并将每个哈希插入表
data_hash.each do |has|
#check the type of each object
#puts has.class #return hash
insert_statement = session.prepare('INSERT INTO keyspace.table JSON ?')
session.execute(insert_statement, [has]) #error occurs here
end
运行此代码后,我收到此错误消息
in `assert_instance_of': options must be a Hash
我检查了表中插入的每个对象都是哈希值,所以我不确定为什么会出现这个问题。
答案 0 :(得分:1)
您说您正在插入JSON
,但您不是,您正在尝试插入对象。请参阅文档中的此示例:
INSERT INTO cycling.cyclist_category JSON '{
"category" : "Sprint",
"points" : 700,
"id" : "829aa84a-4bba-411f-a4fb-38167a987cda"
}';
如果你这样做,你必须给它一个json格式。
答案 1 :(得分:1)
使用.to_json
添加\
转义字符。这给了我错误
INSERT INTO organization_metadata JSON '{\"id\":9150,\"destroyed\":false,\"name\":\"ABC\",\"timestamp\":1510541801000000000}';
以下内容有效。
INSERT INTO organization_metadata JSON '{"id":9150,"destroyed":false,"name":"ABC","timestamp":1510541801000000000}';