任何人都可以提出一个更好/更简洁的方法从Json对中提取价值,而不是我迄今为止所获得的价值......
我的Json对是
{"myKeyName":"myKeyValueVariableLength"}
存储在myFile.txt中,我只想要KeyValue(不带引号)。我目前得到的是:
#!/bin/bash
PAIR=$(<myFile.txt)
IFS=': ' read -a arr <<< $PAIR
ONE="${arr[1]%?}"
TWO="${ONE%?}"
THREE=${TWO#'"'}
echo $THREE
这对我有用,但我猜测有更简洁的方法吗?我听说过jsawk但是如果可能的话,我想尝试在bash中做所有事情。
韩国社交协会
答案 0 :(得分:1)
Bash包含内置的正则表达式测试,其格式为[[ string =~ regex ]]
。运行后,捕获的子模式存储在名为$BASH_REMATCH
关于处理报价和逃避有点挑剔/神奇,所以我花了一段时间才开始工作,但这似乎有效:
PAIR='{"myKeyName":"myKeyValueVariableLength"}'
[[ $PAIR =~ ^\{\"([^\"]+)\":\"([^\"]+)\"\}$ ]] && echo "The key is ${BASH_REMATCH[1]} and the value is ${BASH_REMATCH[2]}"
[或者,以Unix方式执行,并调用sed
,awk
,perl
,python
,php
或您已安装的任何内容会让你的生活更轻松例如php -r "print_r( json_decode('"$PAIR"') );"
的某些内容......]
答案 1 :(得分:0)
jq
用于处理JSON:
jq -r '.myKeyName' myFile.txt