首页 > 解决方案 > 在将 JSON 转换为 CSV 时在 jq 中使用 JSONpath 语法的问题

问题描述

我正在尝试在某些条件下将此 JSON 转换为 CSV。而我的条件是“类型”应该是“次要的”。它应该显示具有次要类型的字段。使用以下 cmd 出错。

jq -r '["color","category","type"], ([?type=="secondary"].colors | [.color, .category, .type]) | @csv' test.json > test.csv
    {
      "colors": [
        {
          "color": "black",
          "category": "hue",
          "type": "primary",
          "code": {
            "rgba": [255,255,255,1],
            "hex": "#000"
          }
        },
        {
          "color": "white",
          "category": "value",
          "code": {
            "rgba": [0,0,0,1],
            "hex": "#FFF"
          }
        },
        {
          "color": "red",
          "category": "hue",
          "type": "primary",
          "code": {
            "rgba": [255,0,0,1],
            "hex": "#FF0"
          }
        },
        {
          "color": "blue",
          "category": "hue",
          "type": "primary",
          "code": {
            "rgba": [0,0,255,1],
            "hex": "#00F"
          }
        },
        {
          "color": "yellow",
          "category": "hue",
          "type": "primary",
          "code": {
            "rgba": [255,255,0,1],
            "hex": "#FF0"
          }
        },
        {
          "color": "green",
          "category": "hue",
          "type": "secondary",
          "code": {
            "rgba": [0,255,0,1],
            "hex": "#0F0"
          }
        }
      ]
    }

标签: syntaxjqjsonpath

解决方案


您所拥有的似乎是 JSONPath 语法(https://github.com/json-path/JsonPath),它不适jq用于有自己的 DSL 语法

要根据条件过滤此特定案例,您需要一个select语句

[ "color", "category", "type" ], 
( .colors[] | select( .type == "secondary" ) | [ .color, .category, .type] ) | @csv

jqplay演示


推荐阅读