bugfix> json > 投稿

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 件
  • 1つは、 result  問題の投稿したハッシュには構文エラーがあります。だから、私はそれを修正しました:

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

    2、あなたは言う、あなたは data を削除したい  ( metadata を削除する  それから大丈夫です)、しかしあなたが必要とする値、すなわち uid  および name 、それらは 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"]
    
    

あなたの答え