【发布时间】:2016-04-25 11:49:16
【问题描述】:
我正在使用 JSON.sh 解析 JSON 数据。我想从json 文件(test.json)中读取数据,其内容类似于,
{
"/home/ukrishnan/projects/test.yml": {
"LOG_DRIVER": "syslog",
"IMAGE": "mysql:5.6"
},
"/home/ukrishnan/projects/mysql/app.xml": {
"ENV_ACCOUNT_BRIDGE_ENDPOINT": "/u01/src/test/sample.txt"
}
}
我尝试使用 JSON.sh 解析这个 JSON,
test_parser=`sh ./lib/JSON.sh < test/test.json`
echo $test_parser
打印出来,
["/home/ukrishnan/projects/test.yml","LOG_DRIVER"] "syslog" ["/home/ukrishnan/projects/test.yml","IMAGE"] "mysql:5.6" ["/home/ukrishnan/projects/test.yml"] {"LOG_DRIVER":"syslog","IMAGE":"mysql:5.6"} ["/home/ukrishnan/projects/mysql/app.xml","ENV_ACCOUNT_BRIDGE_ENDPOINT"] "/u01/src/test/sample.txt" ["/home/ukrishnan/projects/mysql/app.xml"] {"ENV_ACCOUNT_BRIDGE_ENDPOINT":"/u01/src/test/sample.txt"} [] {"/home/ukrishnan/projects/test.yml":{"LOG_DRIVER":"syslog","IMAGE":"mysql:5.6"},"/home/ukrishnan/projects/mysql/app.xml":{"ENV_ACCOUNT_BRIDGE_ENDPOINT":"/u01/src/test/sample.txt"}}
然而,同样的命令 (sh ./lib/JSON.sh < test/test.json),如果我通过终端运行,它会打印换行符,
["/home/ukrishnan/projects/test.yml","LOG_DRIVER"] "syslog"
["/home/ukrishnan/projects/test.yml","IMAGE"] "mysql:5.6"
["/home/ukrishnan/projects/test.yml"] {"LOG_DRIVER":"syslog","IMAGE":"mysql:5.6"}
["/home/ukrishnan/projects/mysql/app.xml","ENV_ACCOUNT_BRIDGE_ENDPOINT"] "/u01/src/test/sample.txt"
["/home/ukrishnan/projects/mysql/app.xml"] {"ENV_ACCOUNT_BRIDGE_ENDPOINT":"/u01/src/test/sample.txt"}
[] {"/home/ukrishnan/projects/test.yml":{"LOG_DRIVER":"syslog","IMAGE":"mysql:5.6"},"/home/ukrishnan/projects/mysql/app.xml":{"ENV_ACCOUNT_BRIDGE_ENDPOINT":"/u01/src/test/sample.txt"}}
我想阅读这篇文章并将其分配给 bash 变量,例如,
file_name='/home/ukrishnan/projects/test.yml'
key='LOG_DRIVER'
value='syslog'
由于我对 shell 脚本和 grep 或 awk 几乎完全陌生,因此我不太了解如何实现这一点。对此的任何帮助将不胜感激。
【问题讨论】:
-
尝试用双引号回显:
echo "$test_parser" -
@JoaoMorais 它的打印效果与在终端中执行相同(带有换行符)
-
使用
jq -
@hek2mgl 嘿,对不起,我无法在服务器上安装任何东西 ;(
-
然后使用能够解析json的编程语言。像
python、perl、PHP...我敢肯定,如果不是全部都安装在服务器上。