Я новичок в рубине, поэтому, пожалуйста, извините за любое незнание, которое я могу нести. Мне было интересно, как разбирать ответ JSON для каждого значения, принадлежащего определенному ключу. Ответ в формате,Ruby, Разбор JSON-ответа для массива значений
[
{
"id": 10008,
"name": "vpop-fms-inventory-ws-client",
"msr": [
{
"key": "blocker_violations",
"val": 0,
"frmt_val": "0"
},
]
},
{
"id": 10422,
"name": "websample Maven Webapp",
"msr": [
{
"key": "blocker_violations",
"val": 0,
"frmt_val": "0"
}...
Там в некоторых других записей в ответ, но ради не имея огромный блок кода, Я сократил it.The код, который я написал это:
require 'uri'
require 'net/http'
require 'JSON'
url = URI({my url})
http = Net::HTTP.new(url.host, url.port)
request = Net::HTTP::Get.new(url)
request["cache-control"] = 'no-cache'
request["postman-token"] = '69430784-307c-ea1f-a488-a96cdc39e504'
response = http.request(request)
parsed = response.read_body
h = JSON.parse(parsed)
num = h["msr"].find {|h1| h1['key']=='blocker_violations'}['val']
Я по существу ищу значение val для каждого нарушения блокировки (ответ json содержит сотни записей, поэтому im ожидает сотни значений блокировщика). Я надеялся, что num будет содержать массив всех «val». Если у вас есть какие-либо идеи в этом, это будет очень полезно!
EDIT! Я получаю выход консольной
scheduler caught exception:
no implicit conversion of String into Integer
C:/dashing/test_board/jobs/issue_types.rb:20:in `[]'
C:/dashing/test_board/jobs/issue_types.rb:20:in `block (2 levels) in <top (requi
red)>'
C:/dashing/test_board/jobs/issue_types.rb:20:in `select'
я подозреваю, что может быть слишком много, чтобы сделать с вопросом, но какая-то помощь будет оценен по достоинству!
Вам нужно перебрать массив объектов, а затем перебрать массив 'msr', ищет каждый «ключ», который соответствует. –