【问题标题】:How do I convert a nested JSON into a comma separated file for analysis? Below are the details如何将嵌套的 JSON 转换为逗号分隔的文件进行分析?以下是详细信息
【发布时间】:2021-10-20 04:42:27
【问题描述】:

需要像下面这样解析下面的Json-

新的.json

{
  "name": "johnDoe",
  "dept": 45,
  "details": [
    {
      "salary": "76566",
      "weight": "150",
      "height": "160",
      "sex": "male",
      "country": "Usa",
      "State": "NJ"
    },
    {
      "salary": "76560",
      "weight": "160",
      "height": "180",
      "sex": "male",
      "country": "Usa",
      "State": "NC"
    }
  ]
}
{
  "name": "DanLee",
  "dept": 46,
  "details": [
    {
      "salary": "76566",
      "weight": "180",
      "height": "160",
      "sex": "male",
      "country": "Usa",
      "State": "NJ"
    },
    {
      "salary": "76560",
      "weight": "190",
      "height": "180",
      "sex": "male",
      "country": "Usa",
      "State": "NC"
    },
    {
      "salary": "87888",
      "weight": "170",
      "height": "160",
      "sex": "male",
      "country": "Usa",
      "State": "NY"
    }
  ]
}

需要从上述Json格式中提取名称、体重和状态信息,并得到一个逗号分隔的文件进行分析,如下所示:

name,weight,State
johnDoe,150,NJ
johnDoe,160,NC
DanLee,180,NJ
DanLee,190,NC
DanLee,170,NY

我刚刚开始在 Linux 中使用 Jq,想通过一步一步的解释来了解如何进行这种转换。

谢谢。

【问题讨论】:

  • 您的 JSON 输入缺少相当多的标点符号以使其成为有效的 JSON。

标签: json jq


【解决方案1】:
jq -r '.name as $name | .details[] | [$name, .weight, .State] | @csv' foo.json

给我:

"johnDoe","150","NJ"
"johnDoe","160","NC"
"DanLee","180","NJ"
"DanLee","190","NC"
"DanLee","170","NY"

细分:

  • .name as $name 记住当前名称为$name
  • .details[]一一展开详情数组
  • [$name, .weight, .State] 为每个细节元素构造一个数组
  • @csv 使用内置的 CSV 转换。
  • -r:不要再将输出包装在 JSON 字符串中。

【讨论】:

  • 你可以跳过使用变量,直接去[.name] + (.details[] | [.weight, .State]) | @csv
  • 谢谢!我将检查此解决方案并回复任何问题。
猜你喜欢
  • 2011-01-29
  • 1970-01-01
  • 2015-12-21
  • 1970-01-01
  • 1970-01-01
  • 2018-04-24
  • 2020-12-16
  • 2022-12-10
  • 1970-01-01
相关资源
最近更新 更多