【问题标题】:Shell Script to read key values from file and convert to JSON用于从文件中读取键值并转换为 JSON 的 Shell 脚本
【发布时间】:2020-04-21 00:56:45
【问题描述】:

我有一个包含键值对格式的文本文件

Var1=Value1
Var2=Value2
Var3=Value3

我已使用以下构造将它们转换为变量

while read -r line; do declare "$line"; done <inputfile.txt

我需要将这些变量或键/值对转换为如下所示的 json 格式

[{
    "Key": "Var1",
    "Value": "Value1"
}, {
    "Key": "Var2",
    "Value": "Value2"
}, {
    "Key": "Var3",
    "Value": "Value3"
}]

如何在 shell 脚本中实现将变量转换为 JSON 格式,或直接从文件读取而不转换为变量?

我需要使其通用以从文件中读取键/值对并转换为 JSON。然后我会在命令中使用 json 字符串,因此 json 也需要在一行上。我只是为了便于阅读而对其进行了格式化,但需要它是

[{"Key": "Var1","Value": "Value1"}, {"Key": "Var2","Value": "Value2"}, {"Key": "Var3","Value": "Value3"}]

谢谢

【问题讨论】:

  • This similar question 应该给出一些提示。
  • 谢谢@Shawn。但是盒子上没有安装jq,我可能无法安装它。有没有纯shell脚本的方式来生成呢?
  • @l0b0。在发布之前,我已经看过这个问题。它有硬编码的键,我需要一种通用格式,其中键名也来自文件
  • @adbdkb,要实现 正确 纯 shell 答案,您需要在 shell 中实现整个 JSON 语言。这意味着转义所有需要转义的字符,将多字节 Unicode 字符转换为具有正确代码点的\u.... 序列等。
  • 基本上这意味着重新实现jq,除非你真的只有微不足道的键和值。

标签: json bash shell


【解决方案1】:

警告:不要在任何地方使用此代码。使用 Bash 创建或使用 JSON 完全是一个非常糟糕的主意。如果你不知道为什么看看a similar question for HTML。您已被警告。

使用纯字母数字键和值,您可以执行以下操作:

printf '['
while IFS='=' read -r key value
do
    printf '{"%s":"%s"},' "$key" "$value"
done < inputfile.txt | sed 's/.$//'
printf ']'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-26
    • 2017-12-26
    • 2017-09-01
    • 2020-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多