Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/55.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
Ruby on rails 获取其中一个属性与ruby匹配的json值_Ruby On Rails_Json - Fatal编程技术网

Ruby on rails 获取其中一个属性与ruby匹配的json值

Ruby on rails 获取其中一个属性与ruby匹配的json值,ruby-on-rails,json,Ruby On Rails,Json,我有一个JSON文件 { "data": [ { "channel_id":"test1", "who_to_ping":"user124", "workflow_status":"enabled", "non_workflow_status"

我有一个JSON文件

  { "data": [
      {
          "channel_id":"test1",
          "who_to_ping":"user124",
          "workflow_status":"enabled",
          "non_workflow_status":"disabled",
          "auto_response_status":"enabled"
     },
     {
          "channel_id":"test2",
          "who_to_ping":"user476",
          "workflow_status":"enabled",
          "non_workflow_status":"disabled",
          "auto_response_status":"enabled"
     }
]}
我可以通过以下操作访问数据并设置新用户:

channel_id = "test1"
name = "new user"
file_path = "#{Rails.root}/public/slack_config.json"
file = File.read(file_path)
data_hash = JSON.parse(file)
data_hash['data'][0]['who_to_ping'] = name
File.write(file_path, JSON.pretty_generate(JSON.dump(data_hash)))
我需要做的是只更新通道id匹配的数组。例如,channel_id将是传入的变量,它可能是test1、test2或其他值。如果我想将test1的who-to-ping更新为一个新名称
data\u散列['data'][0]['who-to-ping']
在传递的值是动态的情况下将不起作用


我可以搜索频道id匹配的元素,然后如果是第8个元素,则执行数据散列['data'][7]['who_to_ping'],但我相信有一种更有效的方法。这可能很简单,但我的搜索没有显示任何内容,但我不确定正确的搜索词是什么。

您可以通过
data\u hash['data']
进行迭代和映射,检查数据中的通道id是否与传递的通道id匹配,如果匹配,则进行更改

data_hash['data']=data_hash['data'].映射do | data |#您可以删除data_hash['data']=并用可破坏的映射替换它!
如果数据['channel\u id']==channel\u id
数据['who_to_ping']=姓名
#如果需要,也可以在此处更改其他字段
结束
数据#确保返回数据,以便映射工作正常
结束
File.write(File_path,JSON.pretty_generate(data_hash))#不需要使用dump,因为pretty_generate已经可以将哈希转换为JSON

这非常有效,但唯一的问题是,当我将json文件写回文件时,它会弄乱json文件的格式,结果是这样的:“{”数据“:[{”通道id“:“我的id”,““谁对平”:”\“要存储JSON,您只需调用
pretty_generate
,在您的案例中,pretty generate将在内部调用generate,将您的哈希转换为JSON(相当于您案例中的转储):
File.write(File_path,JSON.pretty_generate(data_hash))
啊,你真是个天才,我一直在绞尽脑汁想弄清楚为什么会发生这种事,但这是有道理的,解决了问题。谢谢你让我的一天成为Mshka