【问题标题】:How to convert a REQUEST response to Ruby nested Hash/Array如何将请求响应转换为 Ruby 嵌套哈希/数组
【发布时间】:2015-11-25 06:58:13
【问题描述】:

我正在使用 HTTParty 进行外部 API 调用,如下所示:

@result = HTTParty.get('some/url')

结果是一个带有数组的 3/4 层嵌套 JSON 对象(但结果并不总是相同,有时嵌套对象更多,有时数组更多,有时没有数组等,但它总是嵌套objects 嵌套对象与数组):

  {
  "something": "10100014",
  "something": "025MH-V0625",
  "something": null,
  "something": null,
  "something": "SALE",
  "nested": {
    "something": "DETACHED_HOUSE",
    "something": null,
    "something": "2014",
    "something": 0,
    "something": 138,
    "something": 0,
    "something": null,
    "something": "A2010",
    "something": "M2",
    "nested": {
      "something": "Tværagervej",
      "something": "34A",
      "something": "",
      "something": null,
      "something": "København S",
      "something": "2300",
      "something": "DK"
    }
    ...
}

现在我需要迭代结果的键/值(包括嵌套的键/值),但是当我这样做时:

@result.respond_to?(:each)

@result["nested"].respond_to?(:each)

我收到了false。我也试过:

@n_result = @result.to_json

@n_result = JSON.parse(@result)

但在这两种情况下我都得到了false。有什么想法吗?

【问题讨论】:

    标签: ruby-on-rails arrays ruby json hash


    【解决方案1】:

    此响应似乎不是有效的 JSON,缺少 {}JSON.parse 没有返回任何异常吗?我试过离线:

    @result = %Q{
      {
        "something": "10100014",
        "something": "025MH-V0625",
        "something": null,
        "something": null,
        "something": "SALE",
        "nested": {
          "something": "DETACHED_HOUSE",
          "something": null,
          "something": "2014",
          "something": 0,
          "something": 138,
          "something": 0,
          "something": null,
          "something": "A2010",
          "something": "M2",
          "nested": {
            "something": "Tværagervej",
            "something": "34A",
            "something": "",
            "something": null,
            "something": "København S",
            "something": "2300",
            "something": "DK"
          }
          }
      }
    }
    

    然后:

    @result_r = JSON.parse(@result)
    

    返回:

     => {"something"=>"SALE", "nested"=>{"something"=>"M2", "nested"=>{"something"=>"DK"}}}
    

    当然已经跳过了重复的键。

    让你试试:

    @result_r = JSON.parse("{%s}" % @result)
    

    【讨论】:

    • 我的错,糟糕的 JSON 结构是我的错。让我们假设响应具有正确的 JSON,JSON.parse 可以工作吗?
    • 是的,当然。如果出现问题,请将结果粘贴到此处以查看原因。
    猜你喜欢
    • 2015-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-30
    • 2013-11-13
    • 2017-11-22
    • 2019-08-01
    • 1970-01-01
    相关资源
    最近更新 更多