首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Ruby on Rails中从深度嵌套的JSON中提取数据

在Ruby on Rails中从深度嵌套的JSON中提取数据
EN

Stack Overflow用户
提问于 2014-09-14 20:05:10
回答 1查看 409关注 0票数 0

有一个Json输出,比如

代码语言:javascript
运行
复制
{
  "query": {
    "results": {
      "industry": [
        {
          "id": "112",
          "name": "Agricultural Chemicals",
          "company": [
            {
              "name": "Adarsh Plant",
              "symbol": "ADARSHPL"
            },
            {
              "name": "Agrium Inc",
              "symbol": "AGU"
            }
    },
    ]
    {
          "id": "914",
          "name": "Water Utilities",
          "company": [
            {
              "name": "Acque Potabili",
              "symbol": "ACP"
            },
            {
              "name": "Water Resources Group",
              "symbol": "WRG"
            }
          ]
        }
      ]
    }
  }
}

需要输出-公司名称、公司符号、公司id、公司id名称

Adarsh Plant,ADARSHPL,112,Agrium农业化学品公司,AGU,112,农业化学品Acque Potabili,ACP,914,水务公司水资源集团,WRG,914,水务公司

有什么建议吗

EN

回答 1

Stack Overflow用户

发布于 2014-09-14 22:11:51

您的示例json中有一个拼写错误,但我们将在稍后讨论它。

假设您的json数据已经转换为hash对象,如下所示:

代码语言:javascript
运行
复制
json={
  "query"=> {
    "results"=> {
      "industry"=> [
        {
          "id"=> "112",
          "name"=> "Agricultural Chemicals",
          "company"=> [
            {
              "name"=> "Adarsh Plant",
              "symbol"=> "ADARSHPL"
            },
            {
              "name"=> "Agrium Inc",
              "symbol"=> "AGU"
            }
          ]
        },
       {    
          "id"=> "914",
          "name"=> "Water Utilities",
          "company"=> [
            {
              "name"=> "Acque Potabili",
              "symbol"=> "ACP"
            },
            {
              "name"=> "Water Resources Group",
              "symbol"=> "WRG"
            }
          ]
        }
      ]
    }
  }
}

你可以使用inject和map来处理工业的两级数组,inject将迭代外部数组:

代码语言:javascript
运行
复制
json["query"]["results"]["industry"].inject([]){|m,o|
  m += o["company"].map{|x| [x["name"],x["symbol"],o["id"],o["name"]]}
}  

结果是一个数组数组,其顺序如您所愿:

代码语言:javascript
运行
复制
=> [["Adarsh Plant", "ADARSHPL", "112", "Agricultural Chemicals"], 
    ["Agrium Inc", "AGU", "112", "Agricultural Chemicals"], 
    ["Acque Potabili", "ACP", "914", "Water Utilities"], 
    ["Water Resources Group", "WRG", "914", "Water Utilities"]]

如果你想得到一个用逗号分隔的字符串,你可以在最后链接到.flatten.join(",")

代码语言:javascript
运行
复制
json["query"]["results"]["industry"].inject([]){|m,o|
  m += o["company"].map{|x| [x["name"],x["symbol"],o["id"],o["name"]]}
}.flatten.join(",") 

结果:

代码语言:javascript
运行
复制
=> Adarsh Plant,ADARSHPL,112,Agricultural Chemicals,Agrium Inc,AGU,112,Agricultural Chemicals,Acque Potabili,ACP,914,Water Utilities,Water Resources Group,WRG,914,Water Utilities 

您的json数据的拼写错误:

中间的}, ] {应更改为] },{

将json转换为散列

https://stackoverflow.com/a/7964378/3630826

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25833013

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档