使用bash从JSON文件中提取数据

时间:2015-12-13 19:22:46

标签: json bash shell

让我们说我们有这种JSON文件:

{
  ... 
  "quotes":{
     "SOMETHING":10,
     ...
     "SOMETHING_ELSE":120.4,
     ...
  }   }

如何获取这些值并使用它们将它们组合在一起?

我能做到这一点吗?

#!/bin/bash

#code ...

echo "$SOMETHING + $SOMETHING_ELSE" | bc

#code ...

#exit

我将使用wget命令获取JSON文件。我想要的只是这个文件的内容。

你能帮助我吗?我是shell编程的初学者。

3 个答案:

答案 0 :(得分:3)

我通常使用jq,一个非常快的json解析器来做这种事情(因为使用像awksed这样的工具解析json文件真的很容易出错) 。

给定一个像这样的输入文件:

# file: input.json
{
  "quotes":{
    "SOMETHING":10,
    "SOMETHING_ELSE":120.4
  }
}

您可以使用简单的过滤器获取2个字段的总和:

jq '.quotes.SOMETHING + .quotes.SOMETHING_ELSE' input.json
# output -> 130.4

注意jq在每个主要的Linux发行版中都可用。在debian-derivative系统中,您可以使用sudo apt-get install jq安装。

答案 1 :(得分:0)

这将打印出所选行的浮点数的总和。

#!/bin/bash
awk '{ if ($1 ~ /"SOMETHING":/) {print}; if ($1 ~ /"SOMETHING_ELSE":/) {print} }' $1 | cut -d: -f2 | cut -d, -f1 | awk '{s+=$1};END{print s}'

这会找到您想要的行,删除数字并添加它们。

答案 2 :(得分:0)

Read the json data in shell script所示,您应该查看并了解jq

像awk和sed这样的“普通”shell安装中的工具几十年来都在JSON之前,并且非常糟糕。 jq值得花时间学习。

或者改用Python。