使用bash提取JSON变量

时间:2012-08-11 22:57:42

标签: linux json bash grep

我需要从JSON编码文件中提取变量,并将其分配给Bash中的变量。

摘录...来自file.json

  "VariableA": "VariableA data", 
    "VariableB": [
        "VariableB1", 
        "VariableB2", 
        "VariableB3", 
        "VariableB3"
    ], 

我已经找到了这个

variableA=$(fgrep -m 1 "VariableA" file.json )

但它返回整行。我只想要数据

对于VariableB,我需要用逗号分隔的值替换列表。

我看过awk,sed,grep,regexpressions并且确实给出了学习曲线......需要知道使用哪一个,或者更好的解决方案。

感谢您的建议......但这很完美 GIT中://github.com/kristopolous/TickTick.git

3 个答案:

答案 0 :(得分:7)

最好使用JSON解析器。 http://json.org/列出了许多,其中两个用于BASH shell。

答案 1 :(得分:1)

有强大的命令行JSON工具jq

提取单个值很简单:

variableA=$(jq .VariableA file.json)

对于以逗号分隔的数组内容,请尝试使用

variableB=$(jq '.VariableB | @csv' file.json)

variableB=$(jq '.VariableB | .[]' file.json | tr '\n' ',' | head -c-1)

答案 2 :(得分:0)

如果你愿意使用Perl,他们有一个'open()'函数,它将使用json函数'to_json'来管道文件。如果你想提取json,你可以使用'from_json'函数。你可以在这里查看:

http://search.cpan.org/~rjbs/perl-5.16.0/lib/open.pm

http://metacpan.org/pod/JSON#to_json

http://metacpan.org/pod/JSON#from_json(您也可以尝试使用解码json)