Правильный способ разбора полезной нагрузки в Ruby - PullRequest
0 голосов
/ 02 апреля 2020

У меня есть следующая полезная нагрузка:

[{:payload=>
   "{\"user\":\"test\",\"job\":\"Test\",\"username\":\"Bob\",\"blocks\":[{\"type\":\"section\",\"text\":{\"type\":\"mrkdwn\",\"text\":\"this is the title\"}},{\"type\":\"context\",\"elements\":[{\"type\":\"mrkdwn\",\"text\":\"Test\"}]},{\"type\":\"divider\"}]}"}]

Я пытаюсь выяснить, как извлечь ее. Я пытался

JSON.parse(response) 

Но я получаю следующую ошибку

TypeError: no implicit conversion of Hash into String

Как мне извлечь это значение в то, что я могу сделать что-то вроде:

response.job == "test" ?

1 Ответ

1 голос
/ 02 апреля 2020

Предположим, что вы хотели сказать:

response = [{:payload => "{\"user\":\"test\",\"job\":\"Test\",\"username\":\"Bob\",\"blocks\":[{\"type\":\"section\",\"text\":{\"type\":\"mrkdwn\",\"text\":\"this is the title\"}},{\"type\":\"context\",\"elements\":[{\"type\":\"mrkdwn\",\"text\":\"Test\"}]},{\"type\":\"divider\"}]}"}]

Тогда response - это массив с одним элементом. Этот один элемент - га sh. Таким образом, вы получите доступ к payload с помощью:

payload = JSON.parse(response.first[:payload])
=> {
        "user" => "test",
         "job" => "Test",
    "username" => "Bob",
      "blocks" => [
        [0] {
            "type" => "section",
            "text" => {
                "type" => "mrkdwn",
                "text" => "this is the title"
            }
        },
        [1] {
                "type" => "context",
            "elements" => [
                [0] {
                    "type" => "mrkdwn",
                    "text" => "Test"
                }
            ]
        },
        [2] {
            "type" => "divider"
        }
    ]
}

Объект payload будет тогда ha sh, и к его дочерним элементам можно получить доступ, используя стандартный вызов []:

job = payload['job']
=> "Test"
...