在API调用和JSON.parse之后操作结果

时间:2018-05-25 03:40:39

标签: json ruby

使用Ruby,我从API中提取响应,然后使用JSON.parse解析为结果

result = JSON.parse(response)    

在get中,有额外的“元数据”和“数据”,以及输出的实际“项目”

输出类似于:

  

{“metadata”=> {“version”=> 5},“data”=> {“paging”=> {“total_items”=> 1,“number_of_pages”=> 1} ,“items”=> [{“type”=>“OrganizationSummary”,“uid”=>“33a97e”,“properties”=> {“name”=>“Google”}]

我想从结果中删除“元数据”和“数据”,并输出所提取项目的uid(33a97e)和名称(Google)。

最好的方法是什么?

1 个答案:

答案 0 :(得分:0)

其中,您发布的result哈希值存在语法错误。所以,我把它修改为:

result = {"metadata"=>{"version"=>5}, "data"=>{"paging"=>{"total_items"=>1, "number_of_pages"=>1}, "items"=>[{"type"=>"OrganizationSummary", "uid"=>"33a97e", "properties"=>{"name"=>"Google"}}]}}

两个,你说,你想从中删除data(删除metadata没问题),但你需要的值是uidname,它们是嵌套在data内。所以,如果你删除它,你也会丢失这些值。

我想,您只想删除paging部分。以下是我的解决方案:

result.delete('metadata')
 => {"version"=>5}

result['data'].delete('paging')
 => {"total_items"=>1, "number_of_pages"=>1}

# Now the values you need,
# `uid`(s) - can be more than one, as `items` is an array
result['data']['items'].map { |h| h['uid'] }
 => ["33a97e"]

# `name`(s)
result['data']['items'].map { |h| h['properties']['name'] }
 => ["Google"]