日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

json 格式化工具_如何在命令行中优雅地处理JSON

發(fā)布時(shí)間:2023/12/4 javascript 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 json 格式化工具_如何在命令行中优雅地处理JSON 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

當(dāng)年剛出道的時(shí)候,整天使用 grep/cut/awk 處理各種純文本日志。那時(shí)候的日志都是一行一條,內(nèi)容使用特定分割符。使用各種 unix 命令配合管道真可謂得心應(yīng)手。

然而,到了 9102 年,好多數(shù)據(jù)都以 json 形式傳輸和存儲(chǔ)。awk 這類工具在 json 處理方面就有點(diǎn)力不從心了,畢竟是幾十年前開發(fā)的工具。那有沒有針對(duì) json 專門開發(fā)的工具呢?答案是肯定的,這就是本文要介紹的 jq 命令。

jq?stedolan.github.io

jq 支持各種 unix 系統(tǒng),請(qǐng)自行安裝。現(xiàn)在單講幾種使用場景。

先來一個(gè)段 json 數(shù)據(jù),內(nèi)容如下(并寫入 a.json 文件):

{"code":0,"message":"0","ttl":1,"data":{"results":[{"item_id":1342,"type":1},{"item_id":1785,"type":2},{"item_id":1413,"type":3}]}}

首先要做的就是格式化,這是 jq 最簡單的功能:

cat a.json | jq ''

輸出效果如下(還有語法高亮):

使用 jq 格式化 json

如果 json 很長,則可以使用管道傳給 less 命令:

cat a.json | jq '' | less

如果你自己試一下就會(huì)發(fā)現(xiàn),less 展示的結(jié)果沒有顏色,這怎么能忍?

終端下的顏色是由轉(zhuǎn)義序列控制的。有興趣的同學(xué)可以參考我的拙作

濤叔:多彩的終端?zhuanlan.zhihu.com

像 jq 這類的工具會(huì)檢測輸出目的地是否為終端環(huán)境(tty),如果不是(比如管道或普通文件)則不會(huì)輸出顏色轉(zhuǎn)義序列,否則這些轉(zhuǎn)義序列會(huì)破壞文件內(nèi)容。

但如果確定讀寫雙方都支持轉(zhuǎn)義序列,我們就可以強(qiáng)制開啟顏色輸出:

jq -C '' a.json|less -R

這里用到了 jq 的 -c參數(shù)和 less 的 -R 參數(shù)。


現(xiàn)在介紹 jq 的高級(jí)操作。還是以上面的 json 為例。

{"code": 0,"message": "0","ttl": 1,"data": {"results": [{"item_id": 1342,"type": 1},{"item_id": 1785,"type": 2},{"item_id": 1413,"type": 3}]} }

顯然,這是一個(gè)比較負(fù)雜的數(shù)據(jù)結(jié)構(gòu)。我們可以使用 jq 提取部分字段

$ cat a.json | jq '.code, .ttl' 0 1

提取字段使用. 操作,提取多個(gè)字段可以使用, 連接。

如果我們想提取 results 內(nèi)容,則可以這樣:

$ cat a.json | jq '.data.results' [{"item_id": 1342,"type": 1},{"item_id": 1785,"type": 2},{"item_id": 1413,"type": 3} ]

是不是清真多了?

傳統(tǒng)的 unix 工具是以行為單位,而 json 數(shù)組的每個(gè)元素可能有復(fù)雜的數(shù)據(jù)結(jié)構(gòu)(多行),我們能否以元素為單位處理 json 數(shù)據(jù)呢?當(dāng)然可以。

提取數(shù)組的元素字段

$ cat a.json | jq '.data.results' | jq '[].item_id' 1342 1785 1413

提取多個(gè)數(shù)組元素字段

$ cat a.json | jq '.data.results' | jq '[]|.item_id,.type' 1342 1 1785 2 1413 3

結(jié)果是 item_id 和 type 交替出現(xiàn),傳統(tǒng)的 unix 工具依然不好處理。能將同一元素的不同字段放到一行嗎?當(dāng)然可以:

$ cat a.json | jq '.data.results' |jq '.[] |"item_id:(.item_id) type:(.type)"' "item_id:1342 type:1" "item_id:1785 type:2" "item_id:1413 type:3"

這里用到了所謂的 string interpolation 語法,有點(diǎn)像 swift 語言。好了,現(xiàn)在你可以再配合其他 uinx 工具對(duì)數(shù)據(jù)進(jìn)行處理了。

jq 還支持很多高級(jí)特性,有興趣的同學(xué)可以參考官方手冊(cè)。本文的重點(diǎn)是介紹 jq 最核心的 20% 功能,基本可以解決 80% 的問題。

先寫這么多,有問題請(qǐng)留言討論。

總結(jié)

以上是生活随笔為你收集整理的json 格式化工具_如何在命令行中优雅地处理JSON的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。