如何在linux中使用命令行解析json文档

Tags: shell

如果你经常使用命令行或shell脚本处理JSON格式的文本,你可能想知道是否有任何命令行实用程序,它可以解析JSON字符串。当您测试或调试JSON的Web服务一个命令行的JSON解析器非常方便。您可以从Web服务的JSON格式的响应反馈到命令行的JSON解析器,从而轻松地检查,否则难以读取JSON响应或从中提取单个对象。

在本教程中,我将介绍如何使用命令行解析JSON字符串。

在Linux中,有一个命令行的JSON处理器称为JQ这正是做这个的。使用JQ,你可以parse,filter,map,毫不费力地转换JSON的结构化数据。
要在Linux上安装JQ,只需下载其二进制文件(32位和64位系统),如下所示。

$ wget http://stedolan.github.io/jq/download/linux32/jq (32-bit system)
$ wget http://stedolan.github.io/jq/download/linux64/jq (64-bit system)
$ chmod +x ./jq
$ sudo cp jq /usr/bin

JQ也可在Windows和mac OS X平台上使用,并且它的源代码是在MIT许可下发布的。


下面的例子说明了如何使用JQ解析JSON-structured数据。

一个示例JSON字符串:

$ cat json.txt
{
    "name": "Google",
    "location":
    {
        "street": "1600 Amphitheatre Parkway",
        "city": "Mountain View",
        "state": "California",
        "country": "US"
    },
    "employees":
    [
         {
              "name": "Michael",
              "division": "Engineering"
         },
         {
              "name": "Laura",
              "division": "HR"
         },
         {
              "name": "Elise",
              "division": "Marketing"
         }
    ]
}

解析JSON对象:

$ cat json.txt | jq '.name'
Google

解析一个嵌套的JSON对象:

$ cat json.txt | jq '.location.city'
"Mountain View"

从一个JSON对象中提取特定字段:

$ cat json.txt | jq '.location | {street, city}'
{
  "city": "Mountain View",
  "street": "1600 Amphitheatre Parkway"
}

本文链接:http://www.4byte.cn/learning/120051/ru-he-zai-linux-zhong-shi-yong-ming-ling-xing-jie-xi-json-wen-dang.html