【问题标题】:Check values in JSON file array using jq使用 jq 检查 JSON 文件数组中的值
【发布时间】:2022-11-29 01:46:15
【问题描述】:

我是初学者,我正在尝试制作一个 bash 脚本,从网站下载数据并告诉我服务的每小时价格,并告诉我什么时候便宜,什么时候贵。

curl -s https://something.json | jq '.tomorrow[] | select(.region=="region3") | {values, median}'

从那个命令我得到这个:

{
  "values": [
    71.65,
    70.76,
    70.63,
    71.43,
    73.47,
    84.35,
    88.18,
    97.98,
    112.65,
    155.36,
    155.32,
    207.12,
    252.48,
    311.12,
    350.38,
    452.02,
    461.86,
    503.09,
    487.77,
    465.18,
    401.17,
    335.88,
    298.53,
    255.61
  ],
  "median": 243.08
}

我想检查每个值与中位数的比较并打印出类似

At 1am it is cheap
...
At 5pm it is expensive
...
At 11pm it is cheap
...

我试过了,但没用

curl -s https://something.json | jq '.tomorrow[] | select(.region=="region3") | {values, median} | if .values >= .median then "Expensive" elif .values <= .median then "Cheap"'

我也考虑过使用 walk() 但不太明白。

【问题讨论】:

  • 列表不应该从“12am”开始,即午夜吗?

标签: json bash jq


【解决方案1】:

您可以使用 to_entries,它将使用数组的索引作为键:

.median as $median
| .values
| to_entries[]
| "At (.key+1) it is (if .value >= $median then "expensive" else "cheap" end)"

您还可以在插入字符串之前修改键和值:

.median as $median
| .values
| to_entries[]
| .key += 1
| .value |= if . >= $median then "expensive" else "cheap" end
| "At (.key) it is (.value)"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-27
    • 1970-01-01
    • 2023-03-22
    相关资源
    最近更新 更多