使用 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 以存储键值对的主要内容,如果未能解决你的问题,请参考以下文章

通过Shell脚本读取properties文件中的参数

存储具有可变值类型的扁平化 JSON(键值对)

在 Spring Boot、Hibernate 中使用 @Query 注解以 JSON 格式(键值对)查询结果

读取许多json文件以找到公共键值对python

从值中包含逗号的 JSON 中提取键值对

将 json 格式的键值对转换为以符号为键的 ruby​​ 哈希的最佳方法是啥?