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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

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

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

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

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

jq?stedolan.github.io

jq 支持各種 unix 系統,請自行安裝。現在單講幾種使用場景。

先來一個段 json 數據,內容如下(并寫入 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

如果你自己試一下就會發現,less 展示的結果沒有顏色,這怎么能忍?

終端下的顏色是由轉義序列控制的。有興趣的同學可以參考我的拙作

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

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

但如果確定讀寫雙方都支持轉義序列,我們就可以強制開啟顏色輸出:

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

這里用到了 jq 的 -c參數和 less 的 -R 參數。


現在介紹 jq 的高級操作。還是以上面的 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 '.code, .ttl' 0 1

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

如果我們想提取 results 內容,則可以這樣:

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

是不是清真多了?

傳統的 unix 工具是以行為單位,而 json 數組的每個元素可能有復雜的數據結構(多行),我們能否以元素為單位處理 json 數據呢?當然可以。

提取數組的元素字段

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

提取多個數組元素字段

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

結果是 item_id 和 type 交替出現,傳統的 unix 工具依然不好處理。能將同一元素的不同字段放到一行嗎?當然可以:

$ 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 語法,有點像 swift 語言。好了,現在你可以再配合其他 uinx 工具對數據進行處理了。

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

先寫這么多,有問題請留言討論。

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。