3

我需要从 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

4

3 回答 3

7

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

于 2012-08-11T23:01:35.067 回答
2

有强大的命令行 JSON 工具 jq

提取单个值很容易:

variableA=$(jq .VariableA file.json)

对于逗号分隔的数组内容,试试这个

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

或者

variableB=$(jq '.VariableB | .[]' file.json | tr '\n' ',' | head -c-1)
于 2017-07-13T15:03:14.457 回答
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(您也可以尝试使用 decode json)

于 2012-08-11T23:17:43.823 回答