教你不编程快速解析 JSON 数据

本文涉及的产品
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 教你不编程快速解析 JSON 数据

JSON 是一种轻量级的,不受语言约束的数据存储格式,大部分编程语言都可以解析它,并且对编程人员也十分友好。我们在进行通讯/数据交互时,非常经常用到 JSON 格式。

但是,我们在进行数据存储的时候,JSON 格式是以一行的数据进行存储,阅读起来的话也会有些困难。所以,为了更加便于阅读,我们可以采用一些方法对 JSON 数据进行格式化。


在各种编程语言里,都会有一些相应的库为我们解析 JSON 数据,比如 C 语言里有 cjson ,Python 里有 json.tool ,等等。


那在 Linux 平台下,有没有一些工具可以不用编程,直接来格式化/解析 JSON 数据呢?

答案当然是肯定的,这个工具就是 jq


jq 是一款命令行下处理 JSON 数据的工具。其可以接受标准输入,命令管道或者文件中的 JSON 数据,经过一系列的过滤器(filters)和表达式的转化后形成我们需要的数据结构并将结果输出到标准输出中。jq 的这种特性使我们可以很容易地在 Shell 脚本中调用它。


jq 工具的安装


有些发行版已经内置了 jq 这个工具,但有些还没有。如果没有内置这个工具的话,就需要我们手动安装了。


各平台的安装方法如下:


  • Arch Linux 平台:


sudo pacman -S jq


  • Debian, Ubuntu, Linux Mint 平台:


sudo apt-get install jq


  • Fedora:


sudo dnf install jq


  • OpenSUSE:


sudo zypper install jq


对于其它平台的安装,需要查询一下他们的官方安装指导手册。


使用 jq 工具格式化 JSON 数据


比如我们现在有以下 JSON 数据:


{"firstName":"Liangxu","lastName":"Yan","age":18,"address":{"streetAddress":"21 2nd Street","city":"Guangzhou","province":"Guangdong","postalCode":"510655"},"phoneNumber":[{"type":"home","number":"020 555-1234"},{"type":"company","number":"020 555-4567"}],"gender":{"type":"male"}}


看起来很晕是吧?也不方便阅读是吧?


我们先将这个文件保存为 liangxu.json 文件,然后再用 jq 工具格式化一下,使它更便于

我们阅读:


cat liangxu.json | jq '.'


输出结果:


{
  "firstName": "Liangxu",
  "lastName": "Yan",
  "age": 18,
  "address": {
    "streetAddress": "21 2nd Street",
    "city": "Guangzhou",
    "province": "Guangdong",
    "postalCode": "510655"
},
  "phoneNumber": [
{
  "type": "home",
  "number": "020 555-1234"
},
{
  "type": "company",
  "number": "020 555-4567"
}
],
  "gender": {
  "type": "male"
  }
}


'.' 是 jq 工具的最简单表达式,它不改变输入,但可以将其优美地输出,便于阅读和理解。


在以下的案例中,我们均以此数据作为解析对象。


使用 jq 工具解析特定字段


在以上那个示例 JSON 数据中,假如我们想要解析出 address 这个字段,我们可以这样使用 jq 工具:


jq .address liangxu.json


输出结果:


{
  "streetAddress": "21 2nd Street",
  "city": "Guangzhou",
  "province": "Guangdong",
  "postalCode": "510655"
}


接下来,我们来进一步解析地址中的邮编,我们配合管道来进行。


cat liangxu.json | jq .address.postalCode


输出结果:


"510655"


请注意,使用 jq 命令时,过滤器是大小写敏感的,所以你在解析字段时,必须严格跟原字段一样,否则就无法进行解析。


使用 jq 工具解析中数组中的元素


在 JSON 数据中,数组是以方括号括起来的一组元素。如果要解析数组中的元素,我们就需要用到数组里的下标。


在示例 JSON 数据中,phonenumber 这个字段所存储的内容是一个数组,如果我们要获得这个数组里的所有元素,我们只需加上一对方括号即可,如下命令:


jq .phoneNumber[] liangxu.json


输出结果:


{
  "type": "home",
  "number": "020 555-1234"
}
{
  "type": "company",
  "number": "020 555-4567"
}


如果我们要过滤出数组里的第一个元素,我们可以加上下标 [0] :


jq .phoneNumber[0] liangxu.json


输出结果:


{
  "type": "home",
  "number": "020 555-1234"
}


jq 工具的内建函数


jq 工具为我们提供了很多内建函数,这里介绍其中的两个:keyshas


  • keys


keys 是用来获取 JSON 中的 key 元素的,查找 JSON 数据中所有的键。


cat liangxu.json | jq 'keys'


输出结果:


[
  "address",
  "age",
  "firstName",
  "gender",
  "lastName",
  "phoneNumber"
]


  • has


has 是用来是 JSON 数据中判断是否存在某个 key,它的输出结果是 true 或 false 。



cat liangxu.json | jq 'has("alvin")'


输出结果:


false


小结


以上所介绍的是 jq 工具很基本的用法,jq 不仅能够满足一般性的常见需求,更包含运算、内置函数、条件比较、 变量声明、自定函数等强大功能。对此感兴趣的朋友,不妨通过 jq 的官方手册 进行学习。

目录
相关文章
|
8天前
|
数据采集 JSON 数据处理
抓取和分析JSON数据:使用Python构建数据处理管道
在大数据时代,电商网站如亚马逊、京东等成为数据采集的重要来源。本文介绍如何使用Python结合代理IP、多线程等技术,高效、隐秘地抓取并处理电商网站的JSON数据。通过爬虫代理服务,模拟真实用户行为,提升抓取效率和稳定性。示例代码展示了如何抓取亚马逊商品信息并进行解析。
抓取和分析JSON数据:使用Python构建数据处理管道
|
13天前
|
JSON JavaScript Java
在Java中处理JSON数据:Jackson与Gson库比较
本文介绍了JSON数据交换格式及其在Java中的应用,重点探讨了两个强大的JSON处理库——Jackson和Gson。文章详细讲解了Jackson库的核心功能,包括数据绑定、流式API和树模型,并通过示例演示了如何使用Jackson进行JSON解析和生成。最后,作者分享了一些实用的代码片段和使用技巧,帮助读者更好地理解和应用这些工具。
在Java中处理JSON数据:Jackson与Gson库比较
|
23天前
|
JSON JavaScript API
(API接口系列)商品详情数据封装接口json数据格式分析
在成长的路上,我们都是同行者。这篇关于商品详情API接口的文章,希望能帮助到您。期待与您继续分享更多API接口的知识,请记得关注Anzexi58哦!
|
15天前
|
JSON API 数据格式
商品详情数据JSON格式示例参考(api接口)
JSON数据格式的商品详情数据通常包含商品的多个层级信息,以下是一个综合多个来源信息的JSON数据格式的商品详情数据示例参考:
|
16天前
|
存储 JSON 前端开发
JSON与现代Web开发:数据交互的最佳选择
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也便于机器解析和生成。它以文本格式存储数据,常用于Web应用中的数据传输,尤其是在客户端和服务器之间。
29 0
|
18天前
|
存储 JavaScript 前端开发
TypeScript :使用mock提供数据&as const 的使用&tsconfig.json配置
本文介绍了如何在项目中使用 Mock 提供数据,包括安装依赖、配置 Vite 和 TypeScript,以及如何使用 `as const`、元组和 tsconfig.json 配置文件。通过这些配置,可以实现更灵活和高效的开发体验。
|
24天前
|
机器学习/深度学习 JSON JavaScript
LangChain-21 Text Splitters 内容切分器 支持多种格式 HTML JSON md Code(JS/Py/TS/etc) 进行切分并输出 方便将数据进行结构化后检索
LangChain-21 Text Splitters 内容切分器 支持多种格式 HTML JSON md Code(JS/Py/TS/etc) 进行切分并输出 方便将数据进行结构化后检索
20 0
|
19天前
|
缓存 Java 程序员
Map - LinkedHashSet&Map源码解析
Map - LinkedHashSet&Map源码解析
39 0
|
19天前
|
算法 Java 容器
Map - HashSet & HashMap 源码解析
Map - HashSet & HashMap 源码解析
29 0
|
19天前
|
存储 Java C++
Collection-PriorityQueue源码解析
Collection-PriorityQueue源码解析
34 0

推荐镜像

更多