此对象包含我要访问的数据:
[#<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数据的方式是什么?
答案 0 :(得分:0)
您尝试过data[0]['price']
还是data['price']
吗?
似乎ActiveRecord查询将返回。在这种情况下,您只需将查询结果指定为“数据”并使用data['member_name']
访问每个成员,除非查询返回多个项目,否则您必须先指定索引,例如data[index_number]['member_name']
我相信您也可以执行类似data.first.price
或data.price
Rails 4: how to access an attribute of an ActiveRecord_Relation-Object?
希望这会有所帮助。
答案 1 :(得分:0)
在您的代码密钥中是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
答案 2 :(得分:0)
注意:假设您将ConceptPayment
对象存储为cp_obj
:
我认为您需要的是deep_symbolize_keys
。您的问题没有详细说明什么是种类 ConceptPayment 。
如果它是模型对象,则应该可以进行以下操作:
as_json
将对象作为哈希值获取。尝试cp_obj.as_json
。通常,它以JSON格式(Rails 5.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"
我希望能有所帮助。