【发布时间】:2020-12-09 16:36:34
【问题描述】:
我有一个看起来像这样的哈希响应对象:
jsonResponse = {:json=>{"reply"=>[{"person"=>"abc", "roll_no"=>"1234", "location"=>"loc1", "score"=>"1"}, {"person"=>"def", "roll_no"=>"1235", "location"=>"loc2", "score"=>"2"},{"person"=>"fgh", "roll_no"=>"1236", "location"=>"loc3", "score"=>"3"}]}, :status=>200}
我必须在每个回复数组对象中添加一个键值对在特定位置,以便响应转换为类似的东西,为了现在更简单,让我们尝试添加特定位置的 samke 键值对:
jsonResponse = {:json=>{"reply"=>[{"person"=>"abc", "roll_no"=>"1234","location"=>"loc1", "new_value => "new_result", "score"=>"1"}, {"person"=>"def", "roll_no"=>"1235", "location"=>"loc2","new_value => "new_result", "score"=>"2"},{"person"=>"fgh", "roll_no"=>"1236", "location"=>"loc3", "new_value => "new_result", "score"=>"3"}]}, :status=>200}
这是我尝试过的,我通过 jsonResponse 运行 .each :
jsonResponse[:json]['reply'].each do |object|
objectArray = object.to_a
insert_at = objectArray.index(objectArray.assoc('score'))
object = Hash[objectArray.insert(insert_at, ['new_value','new_result'])]
print("\n\nTest\n\n")
print object
end
print("\n\nFinal Response\n\n")
print jsonResponse
我正在打印的 object 具有所需的响应,但它没有在 jsonResponse 中得到更新
这是上面代码sn-p的输出:
Test
{"person"=>"abc", "roll_no"=>"1234", "location"=>"loc1", "new_value"=>"new_result", "score"=>"1"}
Test
{"person"=>"def", "roll_no"=>"1235", "location"=>"loc2", "new_value"=>"new_result", "score"=>"2"}
Test
{"person"=>"fgh", "roll_no"=>"1236", "location"=>"loc3", "new_value"=>"new_result", "score"=>"3"}
Final Response
{:json=>{"reply"=>[{"person"=>"abc", "roll_no"=>"1234", "location"=>"loc1", "score"=>"1"}, {"person"=>"def", "roll_no"=>"1235", "location"=>"loc2", "score"=>"2"}, {"person"=>"fgh", "roll_no"=>"1236", "location"=>"loc3", "score"=>"3"}]}, :status=>200}
Q2. 从代码 sn-p 中也可以看出,insert_at 逻辑的工作方式是在位置之前添加我们指定,例如它在 score key 之前添加,是否有我可以编写的逻辑添加到指定 key 之后而不是之前的 位置?
感谢大家的努力
【问题讨论】:
-
哈希仅按插入排序...仅应影响迭代的顺序。因此,您将不得不删除所有内容并重新插入,或者读取并创建一个新的哈希值。请问这个练习的目的是什么?如果您稍后在数据传输中通过索引位置访问哈希/json,您应该查看新的访问方式。
-
@benjessop,我从我的 api 中的服务回复中接收到 jsonResponse,我已经根据特定用例发布了 sn-p,我对不同的读取 jsonResponse 的方式持开放态度,但我有根据一个特别存在的键插入键值对
-
您应该注意,尽管自 Ruby 1.9 起保留了散列项的插入顺序,但在 JSON 标准和许多其他支持散列模式的语言中没有这样的限制。在 JSON 中,对象中属性的顺序未指定且不应依赖。
标签: ruby-on-rails ruby ruby-on-rails-3