Bash:遍历json数组并将json值字符串化

xqkwcwgp  于 2022-12-05  发布在  其他
关注(0)|答案(1)|浏览(179)

我有一个json文件(test.json),结构如下

[
  {
     "key1" : "value-1",
     "key2" : {
       "key3" : "value3"
     }
  },
  {
     "key1" : "value-2",
     "key2" : {
       "key4" : "value4"
     }
  }
]

我想将文件内容转换为以下给定结构

[
  {
     "key1" : "value-1",
     "key2" : "{\"key3\":\"value3\"}"     // basically the stringyfy form of json
  },
  {
     "key1" : "value-2",
     "key2" : "{\"key4\":\"value4\"}"     // basically the stringyfy form of json
  } 
]

我尝试如下,能够将key2转换为stringyfy JSON,但不确定如何更新为JSON。无论我从现有的stackoverflow问题中获得什么引用,它们都只是将新值添加到现有的json对象中。我需要读取现有的值并修改相同的值,然后将其更新为相同的json数组

jq -c '.[]' $BUILD_DIR/test.json | while read i; do
    echo $(jq -r '.key2' <<< "$i") | jq '@json' 
done

如果我只需要直接更新key2的值,下面的一个对我来说是有效的,这可能看起来很明显,但我对bash脚本语法非常陌生。

jq '( .[]).key2 |= "foo"' $BUILD_DIR/test.json
6pp0gazn

6pp0gazn1#

jq 'map(.key2 |= tojson)'

输出

[
  {
    "key1": "value-1",
    "key2": "{\"key3\":\"value3\"}"
  },
  {
    "key1": "value-2",
    "key2": "{\"key4\":\"value4\"}"
  }
]

Demo on jq play

相关问题