json - 使用 jq 转换特定字段

标签 json transformation jq

我有一个带有字段的 json 对象,该字段可以有一个字符串或一个数组值。

{
  "roles": ["ADMIN", "USER"]
  "user_id": 100,
  "message": "abc added a user xyz",
  "level": "info",
  "created_at": "2014-10-12 14:06:37"
}
{
  "roles": "ADMIN"
  "user_id": 102,
  "message": "a added a user b",
  "level": "info",
  "created_at": "2014-10-12 14:06:37"
}

我想将角色字段转换为 csv,并将其余字段保持原样。
{
  "roles": "ADMIN,USER"
  "user_id": 100,
  "message": "abc added a user xyz",
  "level": "info",
  "created_at": "2014-10-12 14:06:37"
}
{
  "roles": "ADMIN"
  "user_id": 102,
  "message": "a added a user b",
  "level": "info",
  "created_at": "2014-10-12 14:06:37"
}

我尝试阅读文档,但找不到仅转换单个字段的构造。这可以使用Jq来实现吗?

最佳答案

一种选择是使用过滤器:

.roles |= if type == "array" then join(",") else . end

在第一个示例中,这将产生值:“ADMIN,USER”

一个更强大的过滤器是:
.roles |= if type == "array" then map(tostring)|join(",") else . end

更强大的是使用 @csvthen子句,但这会产生比您想要的更多的引号:
"\"ADMIN\",\"USER\""

所以你可能要考虑使用 @tsv 代替;它将产生:
"ADMIN\tUSER"

关于json - 使用 jq 转换特定字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48258020/

相关文章:

json - 使用 jq 展平 JSON 文档

json - 使用 jq,将任意 JSON 扁平化为分隔符分隔的扁平字典

json - 用 jq 替换字符串

javascript - 将 json 数据转换为 javascript 数组 - 多维意义上

c# - ASP.NET Core 6 - 如何在不反序列化的情况下通过 MapPost() 获取 JSON 输入?

r - 如何将转换后的回归绘制回原始比例?

hadoop - Spark与Hadoop

json - Swift:如何将 JSON 类型转换为 NSArray?

json - Flutter:如果对象类型未知,则解码Json

python - 有没有办法在 Python 中操作 STL 的数据点? (医疗应用)