如何使用JQ根据JSON中的值进行过滤

时间:2018-10-19 01:52:20

标签: jq

{    "amazon": {

                "items": [
                  {
                    "name": "harry potter",
                    "state": "sold"
                  },
                  {
                    "name": "adidas shoes",
                    "state": "in inventory"
                  },
                  {
                    "name": "watch",
                    "state": "returned"
                  },
                 ]
    }

}

我想编写jq json解析工具,将“ name:harry potter”从“ sold”状态修改为“ returned”

我想在shell脚本(.sh)文件中对此进行修改。

2 个答案:

答案 0 :(得分:1)

假设输入是有效的JSON,以下过滤器将根据指定的条件有条件地执行编辑:

.amazon.items
|= map(if .name == "harry potter" and .state == "sold"
       then .state = "returned" else . end)

或者更确切地说,使用此过滤器调用jq将发出更新的JSON。

确定确实要执行此操作后,您可能希望使用sponge覆盖原始文件。

答案 1 :(得分:1)

使用jq函数的另一个select过滤器:

jq '.amazon.items |= map(select(.name=="harry potter").state="returned")' file