【问题标题】:jq + update json file and append name according to ID numberjq + 更新json文件并根据ID号追加名称
【发布时间】:2019-11-27 19:13:29
【问题描述】:

我们要按照以下规则编辑json文件

我们需要在mazda字符串下生成名称car0X_hyb.com(而X是ID号)

我们需要更新linux机器上的json文件

示例 - ID=1

那么 json 会是 as

{
  "toyota": [
    "car1.com"
  ],
  "mazda": [
    "car01_hyb.com"
  ],
  "ford": [
    "car01_eng.com"
  ]
}

ID=4 ,那么 json 会是 as

{
  "toyota": [
    "car1.com"
  ],
  "mazda": [
    "car01_hyb.com",
    "car02_hyb.com",
    "car03_hyb.com",
    "car04_hyb.com"
  ],
  "ford": [
    "car01_eng.com"
  ]
}

ID=6 ,那么 json 会是 as

{
  "toyota": [
    "car1.com"
  ],
  "mazda": [
    "car01_hyb.com",
    "car02_hyb.com",
    "car03_hyb.com",
    "car04_hyb.com",
    "car05_hyb.com",
    "car06_hyb.com"
  ],
  "ford": [
    "car01_eng.com"
  ]
}

ID=10 ,那么 json 会为

{
  "toyota": [
    "car1.com"
  ],
  "mazda": [
    "car01_hyb.com",
    "car02_hyb.com",
    "car03_hyb.com",
    "car04_hyb.com",
    "car05_hyb.com",
    "car06_hyb.com",
    "car07_hyb.com",
    "car08_hyb.com",
    "car09_hyb.com",
    "car10_hyb.com"
  ],
  "ford": [
    "car01_eng.com"
  ]
}

【问题讨论】:

标签: python json linux bash jq


【解决方案1】:

您可以使用range 生成后续数字流,使用它们填充模板字符串,并从结果中创建一个数组,例如:

$ jq -n --argjson ID 5 '.mazda = [ range($ID) | "car\("0\(.+1)"[-2:])_hyb.com" ]'
{
  "mazda": [
    "car01_hyb.com",
    "car02_hyb.com",
    "car03_hyb.com",
    "car04_hyb.com",
    "car05_hyb.com"
  ]
}
$ jq -n --argjson ID 10 '.mazda = [ range($ID) | "car\("0\(.+1)"[-2:])_hyb.com" ]'
{
  "mazda": [
    "car01_hyb.com",
    "car02_hyb.com",
    "car03_hyb.com",
    "car04_hyb.com",
    "car05_hyb.com",
    "car06_hyb.com",
    "car07_hyb.com",
    "car08_hyb.com",
    "car09_hyb.com",
    "car10_hyb.com"
  ]
}

根据ID的最大字符长度调整前导0s和-2。

【讨论】:

  • 好主意,但是当 ID=10 时输出不太正确。 jq 有类似 printf "%02d" 的东西吗?
  • @glennjackman 我不知道,但我猜它可以实现。但是 OP 的字符串模板是 car0X_hyb.com
  • 对于 10,OP 希望 "car10_hyb.com" 没有前导零
  • 不太清楚; 1. 没有样本输入,2. 提问前没有任何尝试的迹象
  • KingDavid - 请注意,在 SO 上,不鼓励发布带有可分离问题的帖子,并且有充分的理由。在目前的情况下,我相信@oguzismail 相当合理地确定并解决了基本问题,因此,如果这不能清除您面临的障碍,那么解释您仍然遇到的困难或询问根据通常的minimal reproducible example 指南,单独的、有针对性的问题。我不知道谁对“部分”答案投了反对票,但仅仅因为它没有完全回答一个多部分的问题而对它投反对票是不合适的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-13
相关资源
最近更新 更多