首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用JQ解析对象的JSON数组,使用select匹配对象元素中指定的键值,然后转换为CSV。

使用JQ解析对象的JSON数组,使用select匹配对象元素中指定的键值,然后转换为CSV。
EN

Stack Overflow用户
提问于 2019-11-22 00:16:14
回答 1查看 2.4K关注 0票数 1

使用JQ解析对象的JSON数组,使用select匹配对象元素中指定的键值,然后转换为CSV。

数据源:

代码语言:javascript
复制
{
  "Other": [],
  "Objects": [
    {
      "ObjectElementName": "Test 123",
      "ObjectElementArray": [],
      "ObjectElementUnit": "1"
    },
    {
      "ObjectElementName": "Test ABC 1",
      "ObjectElementArray": [],
      "ObjectElementUnit": "2"
    },
    {
      "ObjectElementName": "Test ABC 2",
      "ObjectElementArray": [],
      "ObjectElementUnit": "5"
    }
  ],
  "Language": "en-US"
}

提取的JQ命令

代码语言:javascript
复制
jq -r '.Objects[] | select(.ObjectElementName | contains("ABC"))'

给定的输出(仅限于单个对象,没有JSON结构).

代码语言:javascript
复制
{
  "ObjectElementName": "Test ABC 1",
  "ObjectElementArray": [],
  "ObjectElementUnit": "2"
}
{
  "ObjectElementName": "Test ABC 2",
  "ObjectElementArray": [],
  "ObjectElementUnit": "5"
}

这种格式所需的输出(保留对象上方的JSON数组)

代码语言:javascript
复制
{
  "Other": [],
  "Objects": [
    {
      "ObjectElementName": "Test ABC 1",
      "ObjectElementArray": [],
      "ObjectElementUnit": "2"
    },
    {
      "ObjectElementName": "Test ABC 2",
      "ObjectElementArray": [],
      "ObjectElementUnit": "5"
    }
  ],
  "Language": "en-US"
}

这种格式需要输出,所以CSV转换可以执行

代码语言:javascript
复制
in2csv -f json --key Objects > output.csv

输出CSV需要

代码语言:javascript
复制
ObjectElementName,ObjectElementUnit
Test ABC 1,2
Test ABC 2,5
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-22 03:05:43

如果您想要CSV,您可能应该使用jq的@csv过滤器,这在本质上保证了有效的CSV输出。例如,使用您的输入:

代码语言:javascript
复制
jq -r '
  ["ObjectElementName","ObjectElementUnit"],
  (.Objects[]
   | select(.ObjectElementName | test("ABC"))
   | [.ObjectElementName,.ObjectElementUnit] )
  | @csv' input.json

生产:

代码语言:javascript
复制
"ObjectElementName","ObjectElementUnit"
"Test ABC 1","2"
"Test ABC 2","5"

但是,如果您愿意承担这些风险,您可以将@csv替换为join(","),在目前的情况下,这将导致:

代码语言:javascript
复制
ObjectElementName,ObjectElementUnit
Test ABC 1,2
Test ABC 2,5
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58985676

复制
相关文章

相似问题

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