Rubyスクリプトを使用してアプリケーションAPIとインターフェースし、返される結果はJSON形式です。例:
{
"incidents": [
{
"number": 1,
"status": "open",
"key": "abc123"
}
{
"number": 2,
"status": "open",
"key": "xyz098"
}
{
"number": 3,
"status": "closed",
"key": "lmn456"
}
]
}
各ブロックで特定の「キー」値(この例ではyzx098)を検索し、関連する「数値」値を返します。
今、私はRubyに慣れていないので、これを達成するのに役立つ関数がすでにあるかどうかはわかりません。しかし、GoogleとRubyリソースブックは、機能するものを何も生み出していません。
助言がありますか?
まず、JSONは次のようになります(コンマに注意してください)。
{
"incidents": [
{
"number": 1,
"status": "open",
"key": "abc123"
},
{
"number": 2,
"status": "open",
"key": "xyz098"
},
{
"number": 3,
"status": "closed",
"key": "lmn456"
}
]
}
上記のjsonを変数に格納します
s = '{"incidents": [{"number": 1,"status": "open","key": "abc123"},{"number": 2,"status": "open","key": "xyz098"},{"number": 3,"status": "closed","key": "lmn456"}]}'
JSONを解析する
h = JSON.parse(s)
number
を使用して、必要なmap
を見つけます
h["incidents"].map {|h1| h1['number'] if h1['key']=='xyz098'}.compact.first
または、以下のようにfind
を使用することもできます
h["incidents"].find {|h1| h1['key']=='xyz098'}['number']
または、以下のようにselect
を使用することもできます
h["incidents"].select {|h1| h1['key']=='xyz098'}.first['number']
以下のようにしてください
# to get numbers from `'key'`.
json_hash["incidents"].map { |h| h['key'][/\d+/].to_i }
json_hash["incidents"]
-キーの値"incidents"
を提供します。これはハッシュの配列にすぎません。
map
各ハッシュを反復処理し、'key'
の値を収集します。次に、配列の各内部ハッシュに Hash#[]
を適用して、"key"
の値を取得します。次に str[regexp]
を呼び出して、'098'
のような数値文字列のみを"xyz098"
から取得し、最後に to_i
を適用して取得しますそれからの実際の整数。
与えられたハッシュが実際にjson
文字列である場合、最初に JSON::parse
を使用してそれを解析し、ハッシュに変換します。次に、前述のように繰り返します。
require 'json'
json_hash = JSON.parse(json_string)
# to get values from the key `"number"`.
json_hash["incidents"].map { |h| h['number'] } # => [1, 2, 3]
# to search and get all the numbers for a particular key match and take the first
json_hash["incidents"].select { |h| h['key'] == 'abc123' }.first['number'] # => 1
# or to search and get only the first number for a particular key match
json_hash["incidents"].find { |h| h['key'] == 'abc123' }['number'] # => 1