在bash脚本中提取JSON值的更好方法

时间:2013-05-29 18:40:57

标签: bash shell

任何人都可以提出一个更好/更简洁的方法从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中做所有事情。

韩国社交协会

2 个答案:

答案 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方式执行,并调用sedawkperlpythonphp或您已安装的任何内容会让你的生活更轻松例如php -r "print_r( json_decode('"$PAIR"') );"的某些内容......]

答案 1 :(得分:0)

jq用于处理JSON:

jq -r '.myKeyName' myFile.txt