使用 shell 脚本迭代 json 以存储键值对
Posted
技术标签:
【中文标题】使用 shell 脚本迭代 json 以存储键值对【英文标题】:iterating json to store key value pairs using shell script 【发布时间】:2022-01-22 16:55:00 【问题描述】:我有一个 json 文件,该文件是在运行时使用 groovy 代码中的 sh 脚本创建的。 json 文件有以下内容。
cat.json
"user1":"pass1",
"user2":"pass2",
"user3":"pass3"
现在我想在运行时创建一个文件,以以下格式存储键值对
测试
user1:pass1
user2:pass2
user3:pass3
谁能帮我写出写这个的shell代码。
【问题讨论】:
在 Jenkins 中使用 groovy 你可以使用:def content = readJSON(file: 'PATH').collect"$it.key:$it.value".join('\n'); writeFile file: 'NEW_PATH', text: content
【参考方案1】:
自从您提到 Java、Groovy,包括 Java 驱动的脚本引擎(BeanShell、javascript、Groovy 本身)以来,您实际上有十几种方法可以将该 JSON 文档转换为表格数据文件(很像 CSV/冒号-SV),但如果您可以使用jq
,那么您至少可以提取 k/v 对,以获得不需要任何转义的简单值:
#!/bin/sh
jq -r 'to_entries[] | "\(.key):\(.value)"' \
< cat.json
这个答案的灵感来自于使用jq
(或将 JSON 文件转换为 CSV 文件)搜索提取条目,尤其是@peak 的答案https://***.com/a/50496145/12232870。
【讨论】:
谢谢@fluffy。该脚本可以在我的本地系统中运行,但是在 jenkins groovy 中执行它时会出现语法错误 WorkflowScript: 41: unexpected char: '\' @ line 5 column 3. jq -r 'to_entries[] | "(.key):(.value)"'以上是关于使用 shell 脚本迭代 json 以存储键值对的主要内容,如果未能解决你的问题,请参考以下文章