【问题标题】:jq with nested objects带有嵌套对象的 jq
【发布时间】:2018-01-21 05:08:28
【问题描述】:

这是我的 JSON 文件

{  
"variables": [],  
"item":[  
{  
  "name": "Joe",
  "item": [
    {
      "name1": "item1",
      "request": {},
      "response": []
    },
    {
      "name1": "item2",
      "request": {},
      "response": []
    }
  ]
},
{
  "name": "Jim",
  "item": [
    {
      "name1": "item3",
      "event": [
        {
          "listen": "test",
          "script": {
            "type": "text/javascript",
            "exec": [
              "//code=gst-70"
            ]
          }
        }
      ],
      "request": {},
      "response": []
    },
    {
      "name1": "item4",
      "event": [
        {
          "listen": "test",
          "script": {
            "type": "text/javascript",
            "exec": [
              "//code=gst-50"
            ]
          }
        }
      ],      
      "request": {},
      "response": []
    }
  ]
}
]
}

我的输出必须是:

[{"name":"Joe _ item1","code": }]
[{"name":"Joe _ item2","code": }]
[{"name":"Jim _ item3","code":gst-70}]
[{"name":"Jim _ item4","code":gst-50}]

我正在尝试通过 jq 来实现它,但是 null 事件值使其非常复杂,无法实现上述输出。这可以使用jq完成吗? 这是我的代码:

 .item[] 
 | ("[{\"name\":\""  +  .name  +  " _ " +  .item[].name1+",\"code\":") ,  
    (.item[]?.event[]?.script.exec[0]  + "}]" ) 

【问题讨论】:

  • 显示您尝试过的和无效的会很有帮助。
  • 就我个人而言,我发现 jq 非常适合超级简单的查询。任何更复杂的事情,我只是用 lodash 创建一个小的 javascript 文件来进行操作。我不喜欢生活在足以应付所有问题的外壳中。

标签: json object nested jq


【解决方案1】:

要求在几个方面不是很清楚,但以下可能与您的想法很接近。但是,输出是有效的 JSON。

.item[]
| .name as $name
| .item[]
| {name: "\($name) _ \(.name1)",
   code: (if .event then .event[].script.exec[0]|split("=")[1]
          else null end) }

根据您的输入,这会产生:

{"name":"Joe _ item1","code":null}
{"name":"Joe _ item2","code":null}
{"name":"Jim _ item3","code":"gst-70"}
{"name":"Jim _ item4","code":"gst-50"}

您可能希望以其他方式获取感兴趣的子字符串,例如:

 .[1+index("="):]

或:

 sub("^[^=]*="; "")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-07
    • 1970-01-01
    • 2020-05-06
    • 2018-06-05
    • 2019-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多