Ruby向JSON文件追加对象报错:Hash无<<方法求助
解决Ruby中JSON Hash无法使用
<<方法的问题 嗨,这个错误其实很明确啦——你试图用数组的<<追加方法去操作一个**哈希(Hash)**对象,而哈希根本没有这个方法,所以才会报错undefined method <<' for #<Hash...!
问题根源
你的rb_hash["searchExamples"]并不是你以为的数组(Array),而是一个哈希。先去看看你原始的#{enviroment}.json文件里,"searchExamples"字段的格式:
- 如果它是
{ ... }大括号包裹的,那就是哈希; - 如果是
[ ... ]中括号包裹的,才是数组。
两种解决方案
方案1:如果searchExamples应该是数组(存多个示例对象)
首先确保原始JSON里这个字段是数组格式,比如:
{ "searchExamples": [] }
然后修改你的代码,还要记得把改动写回文件(你之前的代码只转成了JSON字符串,但没保存到文件里哦):
require 'json' # 替换成你的环境变量值 enviroment = "development" file_path = File.join(File.dirname(__FILE__), "configs/#{enviroment}.json") # 读取并解析JSON文件 rb_hash = JSON.parse(File.read(file_path)) # 保险起见:如果searchExamples不存在或者不是数组,就初始化为数组 rb_hash["searchExamples"] ||= [] # 用数组的<<方法追加新对象 rb_hash["searchExamples"] << { name: "John", long: 20, lat: 45 } # 将修改后的哈希写回文件 File.write(file_path, rb_hash.to_json)
方案2:如果searchExamples本来就是哈希(按键存储示例)
如果这个字段就是用来存键值对的哈希,那你应该用哈希的赋值方式添加内容,比如给新对象指定一个唯一键:
require 'json' enviroment = "development" file_path = File.join(File.dirname(__FILE__), "configs/#{enviroment}.json") rb_hash = JSON.parse(File.read(file_path)) # 用键值对的方式添加到哈希中,比如用name作为键 rb_hash["searchExamples"]["john_example"] = { name: "John", long: 20, lat: 45 } # 写回文件保存改动 File.write(file_path, rb_hash.to_json)
最后提醒
不管用哪种方案,一定要记得用File.write把修改后的JSON写回原文件,不然你的改动只会停留在内存里,不会保存到磁盘哦!
内容的提问来源于stack exchange,提问作者EllieBubbles
相关产品推荐
相关产品推荐

