1. 程式人生 > >Shell命令列處理JSON

Shell命令列處理JSON

基本介紹

經常用python或java處理json資料,其實在Shell命令列,我們可以用開源JQ工具來處理Json資料。會更加簡潔和高效。

CentOS 安裝JQ

wget -O jq https://github.com/stedolan/jq/releases/download/jq-1.5/jq-linux64
chmod +x ./jq
cp jq /usr/bin

JQ常用舉例

1、原始JSON資料

cat jsonData.json
{"productId":"2723","click":60,"view":300,"deal"
:2,"day":"20130919"} {"productId":"2728","click":130,"view":800,"deal":10,"day":"20130919"} {"productId":"3609","click":50,"view":400,"deal":3,"day":"20130919"} {"productId":"3783","click":375,"view":1200,"deal":50,"day":"20130919"} {"productId":"3522","click":87,"view":573,"deal":15,"day":"20130919"}

2、格式化輸出

jq -r . jsonData.json
{
  "productId"
: "2723", "click": 60, "view": 300, "deal": 2, "day": "20130919" } { "productId": "2728", "click": 130, "view": 800, "deal": 10, "day": "20130919" } ...

2、提取json指定欄位轉csv

這裡我們需要得到productId_day,click,view,deal這種格式的csv檔案。

jq -r '[.productId+"_"+.day,(.click|tostring),(.view|tostring),(.deal|tostring)]|join("
,")' jsonData.json 結果: 2723_20130919,60,300,2 2728_20130919,130,800,10 3609_20130919,50,400,3 3783_20130919,375,1200,50 3522_20130919,87,573,15 注意: .productId:取productId欄位的值  .click|tostring:取click欄位的值並轉化為string型別  []:陣列  join(","):陣列中的元素通過","連線。

3、複雜json資料查詢

complexJson='{"uid":"2378","nameInfo":[{"firstName":"nova","lastName":"jos"}]}'
echo ${complexJson} |jq
{
  "uid": "2378",
  "nameInfo": [
    {
      "firstName": "nova",
      "lastName": "jos"
    }
  ]
}
echo ${complexJson} |jq -r '.nameInfo[].lastName'
結果:jos
注意:.nameInfo[].lastName是獲取.nameInfo[] json array中每個json object的lastName欄位。

4、提取指定欄位形成新的json

jq -c '{productId:.productId,click:.click,dayYmd:(.day|tonumber)}' jsonData.json >>newjson.json
結果:
cat newjson.json
{"productId":"2723","click":60,"dayYmd":20130919}
{"productId":"2728","click":130,"dayYmd":20130919}
{"productId":"3609","click":50,"dayYmd":20130919}
{"productId":"3783","click":375,"dayYmd":20130919}
{"productId":"3522","click":87,"dayYmd":20130919}
注意:
 -c/--compact-output:jq 預設是pretty-prints JSON 輸出,加上這個引數,一行一個json物件。

5、csv檔案轉json檔案

cat csvData.csv
1478,john,38
1529,lucy,25
1673,iris,22
jq -R -c 'split(",")|{"uid":.[0],"name":.[1],"age":.[2]|tonumber}' csvData.csv > csv2json.json
cat csv2json.json
{"uid":"1478","name":"john","age":38}
{"uid":"1529","name":"lucy","age":25}
{"uid":"1673","name":"iris","age":22}

主要參考文件

相關推薦

Shell命令處理JSON

基本介紹 經常用python或java處理json資料,其實在Shell命令列,我們可以用開源JQ工具來處理Json資料。會更加簡潔和高效。 CentOS 安裝

jq: 在Linux通過命令處理 JSON

因為最近要處理一些 JSON 資料格式,所以在經過一番搜尋後 最終找到了 jq 這個很棒的工具。jq 允許你直接在命令 行下對 JSON 進行操作,包括分片、過濾、轉換等等。 讓我們通過幾個例子來說明 jq 的功能: 漂亮列印 如果我們用文字編輯器開啟 JSON,有時候可能看起來會一團 糟,但是通過

jq --- shell命令模式下JSON格式化利器

災難 使用curl 喜歡 cal 十分 man 一個 命令 api 開發restful 的web api時,一般使用JSON作為返回數據的格式,調試使用curl命令十分方便, 但是curl有個問題就是返回的JSON數據包並沒有格式化,不利於讀,在數據復雜時更是災難, 這時候

2.1命令JSON的配置「深入淺出ASP.NET Core系列」

希望給你3-5分鐘的碎片化學習,可能是坐地鐵、等公交,積少成多,水滴石穿,謝謝關注。 命令列配置  1.新建控制檯專案  2.nuget引入microsoft.aspnetcore.all  這裡要注意版本號必須和dotnetcore相容

impala-shell命令引數

轉發 https://my.oschina.net/weiqingbin/blog/190929 你可以在啟動 impala-shell 時設定以下選項,用於修改命令執行環境。   Note: 這些選項與 impalad 守護程序的配置選

Linux shell命令

快速切換成GNOME終端:Ctrl + Alt +T 在新的Konsole Terminal視窗中啟動一個新的shell會話(New Window):Ctrl + Shift + M  退出Konsole Terminal(Quit):Ctrl + Shift + Q  顯示出s

mysql 命令處理(六)事務

mysql中,事務是一些資料庫操作語句,有3個特點: 1.只有使用了InnoD引擎的資料庫或者表支援事務 2.事務可以用來維護資料庫完整性,保證成批的sql語句要麼全執行,要麼全不執行,不會出現部分執行失敗導致不一致的情況 3.事務用來管理insert,update,d

命令檢視 json (command line json viewer) 的開發者工具 « 關於網路那些事...

在前後端分離架構中,需要頻繁的測試及檢視 json ,通常都會透過 postman, insomnia 來輔助開發 這裡要介紹的是在 Command-Line

Spring系列學習之Spring Shell命令

英文原文:https://projects.spring.io/spring-shell/ 目錄 介紹 特性 快速開始 示例和相關專案 Spring Shell專案提供了一個互動式shell,允許您使用基於Spring的程式設計模型插入自己的自定義命令。  

kafka shell 命令操作

kafka的命令列操作     1、產看當前叢集中已存在的主題topic         bin/kafka-topics.sh --list --zookeeper bigdata:2181  &n

MongoDB之——基於Shell命令操作記錄

一、插入記錄下面我們來建立一個 test 的集合並寫入一些資料. 建立兩個物件 j 和 t , 並儲存到集合中去.在例子裡 “>” 來表示是 shell 輸入提示符> j = { name : "mongo" }; {"name" : "mongo"} >

Shell命令操作

shell提示符 [[email protected] ~]$ 如果最後一個字元是"#",表示當前終端會話有超級使用者許可權。使用root使用者登入或者使用能提供超級使用者許可權的終端能獲得該許可權。 提示符由名為PS1(prompt strin

有關HDFS程式設計:HDFS Shell命令常見操作

在/usr/local/hadoop/etc/hadoop 目錄下:幫助相關命令1.hdfs dfs     可以顯示hdfs常用命令[email protected]:/usr/local/hadoop/etc/hadoop$ hdfs dfs Usage: h

Shell命令快捷鍵

#Ctrl + F : 游標向前移動一個字元,相當與->(forwards) #Ctrl + B : 游標向後移動一個字元,相當與<-(backwards) #Ctrl + A : 切到命令列開始(ahead) #Ctrl + E : 切到命令列結尾(end) #Ctrl + H

shell命令之檔案操作

【檔案操作】 1、反選刪除檔案 先執行:shopt -s extglob 再執行:rm -rf !(file1) rm -rf !(file1|file2) 2、清空檔案內容 :> file 【磁碟管理】 1、檢視當前目錄下個檔

Linux的 __setup解析 -- 命令處理

__setup這條巨集在Linux Kernel中,使用最多的地方就是定義處理Kernel的啟動引數 的函式及資料結構,巨集定義如下: #define __setup(str, fn) \ __se

JAVA呼叫linux中的shell命令的工具類

二話不說,直接上程式碼! package cn.sigangjun.util; /** * <p>Title:java call linux shell util </p> * <p>Description: java call

HDFS的shell(命令客戶端操作)

HDFS提供shell命令列客戶端,使用方法如下:常用命令引數介紹-help             功能:輸出這個命令引數手冊 -ls                  功能:顯示目錄資訊 示例: hadoop fs -ls hdfs://hadoop-serve

shell命令內快速跳轉

在shell中輸入命令時,如果命令特別長,輸完後發現命令輸入有錯誤,這時候就需要快速的在命令中進行跳轉,以對命令進行修改; 下面幾個快捷鍵,可以快速進行跳轉: Ctrl + a :跳到命令列行首 Ctrl + e :跳到命令列行尾 Alt + f :向後跳一個單詞 Alt

shell 命令實現

獲取UNIX型別的選項:   unix有一個優點就是標準UNIX命令在執行時都具有相同的命令列格式: command -options parameters   如果在執行Shell程式也採用上述格式,Bourne Shell中提供了一條獲取和處理命令列選項的語句,即getopts語句。該語句的格