-1

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

Tks

4

2 回答 2

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"') );"……]

于 2013-05-29T19:06:51.947 回答
0

jq专为处理 JSON 而设计:

jq -r '.myKeyName' myFile.txt
于 2016-08-18T17:02:57.767 回答