繁体   English   中英

如何访问哈希数据-Ruby on Rails

[英]How to access the hash data - Ruby on rails

我的这个对象包含我要访问的数据:

[#<ConceptPayment id: nil, amount: 1, price: 1000.0, concept_id: 3, concept_type: "RegisterType", created_at: nil, updated_at: nil, transaction_sara_id: nil, code: nil, date_code: nil, discount_amount: nil, type_discount_id: nil, observations: nil>]

我尝试使用to_json将其解析为json:

"[{\"id\":null,\"amount\":1,\"price\":1000.0,\"concept_id\":3,\"concept_type\":\"RegisterType\",\"created_at\":null,\"updated_at\":null,\"transaction_sara_id\":null,\"code\":null,\"date_code\":null,\"discount_amount\":null,\"type_discount_id\":null,\"observations\":null}]"

然后我做了这个JSON.parse

[{"id"=>nil, "amount"=>1, "price"=>1000.0, "concept_id"=>3, "concept_type"=>"RegisterType", "created_at"=>nil, "updated_at"=>nil, "transaction_sara_id"=>nil, "code"=>nil, "date_code"=>nil, "discount_amount"=>nil, "type_discount_id"=>nil, "observations"=>nil}]

但我无法访问数据,我只想实现此data[:price]

如何获得数据? 转换对象或访问json数据的方式是什么?

您是否尝试过data[0]['price']data['price']

看起来好像ActiveRecord查询会返回。 在这种情况下,您可以仅将查询结果分配为“数据”,并使用data['member_name']访问每个成员,除非在这种情况下查询返回多个项目,您必须先指定索引,例如data[index_number]['member_name']

我相信您也可以做类似data.first.pricedata.price

Rails 4:如何访问ActiveRecord_Relation-Object的属性?

活动记录查询界面

希望这可以帮助。

在您的代码键中是String 但是,您尝试使用Symbol键来寻找价值。

在这种情况下,您必须使用symbolize_names选项。

string = "[{\"id\":null,\"amount\":1,\"price\":1000.0,\"concept_id\":3,\"concept_type\":\"RegisterType\",\"created_at\":null,\"updated_at\":null,\"transaction_sara_id\":null,\"code\":null,\"date_code\":null,\"discount_amount\":null,\"type_discount_id\":null,\"observations\":null}]"

data = JSON.parse(string, symbolize_names: true).first

data[:price] #=> 1000.0

注意: 假设您将ConceptPayment对象存储为cp_obj

我认为您需要的是deep_symbolize_keys 您的问题没有详细说明ConceptPayment是哪种对象


如果它是一个Model对象 ,那么以下方法应该起作用:

  1. 使用as_json将对象作为哈希值获取。 尝试cp_obj.as_json 通常,它以JSON格式(Rails 5.2)为您提供对象。
  2. 然后,您应该使用deep_symbolize_keys ,例如: my_hash = cp_obj.as_json.deep_symbolize_keys ,然后应该可以进行my_hash[:price]

示例(我只是在Rails控制台上针对我拥有的User类运行了它):

irb(main):002:0> user = User.find 6
  User Load (7.5ms)  SELECT  "users".* FROM "users" WHERE "users"."id" = $1 LIMIT $2  [["id", 6], ["LIMIT", 1]]
=> #<User id: 6, full_name: "Geeks", email: "geeks@abc.com", created_at: "2019-02-04 06:59:33", updated_at: "2019-02-04 06:59:33">
irb(main):003:0> user.as_json
=> {"id"=>6, "full_name"=>"Geeks", "email"=>"geeks@abc.com", "created_at"=>Mon, 04 Feb 2019 12:29:33 IST +05:30, "updated_at"=>Mon, 04 Feb 2019 12:29:33 IST +05:30}
irb(main):004:0> my_hash = user.as_json.deep_symbolize_keys
=> {:id=>6, :full_name=>"Geeks", :email=>"geeks@abc.com", :created_at=>Mon, 04 Feb 2019 12:29:33 IST +05:30, :updated_at=>Mon, 04 Feb 2019 12:29:33 IST +05:30}
irb(main):005:0> my_hash[:full_name]
=> "Geeks"

如果它不是模型对象 ,那么我相信JSON.parse(cp_obj.to_json).deep_symbolize_keys应该可以工作(因为您已经可以使JSON.parse正常工作)!

例:

irb(main):011:0> JSON.parse('{"name":"vaibhav", "more" : {"details": "balding guy! :P"}}').deep_symbolize_keys[:more][:details]
=> "balding guy! :P"

希望对您有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM