JavaScript物件表示法(JSON)是世界上最流行的資料格式之一。它有廣泛的支援和一個簡單的規範。在許多程式語言中使用它很容易,特別是那些針對web開發的語言。
但是手工檢查JSON資料仍然很尷尬。儘管JSON資料集是一種人類可讀的文字格式,但它可能包含大量的資料。原始碼並不總是以易於閱讀的形式格式化JSON。
javajq工具允許使用者格式化、過濾和轉換JSON資料。
因為它是一個命令列工具,所以通常使用jq的方法是在終端中鍵入命令。還有一個很好的線上遊樂場,我們將在下面詳細介紹。
正常的操作是圍繞過濾器和過濾器對一些輸入JSON的應用。您可以使用jq從多個專案的集合中獲取單個專案。或者可以從集合中的每個項中刪除某些欄位,從而簡化資料。您甚至可以執行復雜的操作,將輸入轉換為不同的形式。
jq程式沒有外部依賴性,這意味著它很容易啟動。首先透過jq主頁上的按鈕下載Linux、macOS或Windows的可執行二進位制檔案。一旦下載了程式,就可以直接從命令列執行它。為了方便起見,您可能需要重新命名它(mvjq-osx-amd64 jq),並且您可能需要使它可執行(chmod+xjq)。
透過從命令列不帶引數地執行jq,確認可以執行jq:
$ ./jq您應該看到一些常規用法資訊,從一個簡單的單行摘要開始,例如:
jq - commandline JSON processor [version 1.6]如果你掙扎於上述方法,還有其他選擇。jq軟體支援常見的包管理器,您可以同時嘗試線上沙盒。
標準用法是:
jq [opti***] <jq filter> [file...]例如:
$ jq '.' data.json您也可以透過另一個命令匯入輸入,例如:
$ echo '{"name":"john"}' | jq '.'{ "name": "john"}例如,當第一個命令類似於對curl的呼叫時,這是最有用的,curl可以從web服務獲取JSON資料。
這些示例中顯示的過濾器是最簡單的。(一個句點),它以漂亮的形式列印輸入。這已經非常有用了,但是jq的濾波器提供的功率遠遠超過這個。
jq過濾器有點像CSS選擇器或XPATH表示式。它是一個由小部分組成的長表示式。一個完整的過濾器看起來可能很複雜,但是一旦你學會了基本知識,每個部分都應該是可以理解的。
可以使用.property語法獲取物件屬性的值:
$ echo '{"name":"john"}' | jq '.name'"john"這可以連結訪問深層巢狀結構:
$ echo '{"name":{"first":"john","last":"**ith"}}' | jq '.name.last'"**ith"最簡單的陣列操作透過其索引返回一個元素:
$ echo '[1,2,3]' | jq '.[2]'3注意,與大多數程式語言一樣,jq從位置0開始索引陣列。也可以使用以下語法對子陣列進行切片:
$ echo '[1,2,3]' | jq '.[1:3]'[ 2, 3]在方括號內沒有索引的情況下,jq將單個數組值轉換為自己的內容,即多個值:
$ echo '[1,2,3]' | jq '.[]'123這是將過濾器連結在一起的一種重要方法,我們將在後面介紹。
只有透過閱讀jq手冊,你才能全面瞭解jq的力量。實際上,jq對運算子、變數甚至使用者定義函式的支援使它能夠像任何程式語言一樣工作。
這些特性使高階使用成為可能,儘管很複雜。但是jq有一些內建的特性,比如函式和運算子,即使是簡單的任務也能從中受益。舉個例子:
$ echo '[2,4,8]' | jq 'add / length'4.666666666666667這個過濾器將輸入輸入輸入add和length函式,並對結果進行分割。在運算中,它計算一組數字的平均值。
除法運算子還可以作用於字串,以便根據分隔符將其拆分:
$ echo '"Just testing"' | jq '. / " "'[ "Just", "testing"]select函式過濾陣列,只保留那些透過給定約束的項:
$ echo '[2,4,8]' | jq '.[] | select(. >= 3)'48請注意,這也是jq的管道運算子(|)的一個示例,它類似於shell的管道。它將其左側過濾器的結果作為右側過濾器的輸入。
map函式在處理陣列時非常有用。它對陣列的每個元素而不是整個陣列本身執行操作:
$ echo '[1,2,3]' | jq 'map(.+1)'[ 2, 3, 4]您經常將它與select結合使用,例如。
$ echo '[2,4,8]' | jq 'map(select(. >= 3))'[ 4, 8]由於jq處理任何透過管道傳輸到它的有效JSON,因此可以透過curl命令向它傳送輸出。這允許您從URL獲取JSON並立即在命令列上處理它:
JSON提要是RSS和Atom格式的JSON替代品。NPR站點就是一個支援JSON提要的例子,但很難從原始碼檢視,並且包含大量資料:
很快,您就可以看到,透過獲取這些資料並透過jq進行管道傳輸,讀取起來是多麼容易:
$ curl -s https://feeds.npr.org/1019/feed.json | jq '.'下面是一個更完整的過濾器示例,它獲取站點在星期二釋出的每個故事的id、標題和日期。
$ curl -s https://feeds.npr.org/1019/feed.json |jq '.items | .[] | select( .date_published | .[0:19] + "Z" | fromdate | strftime("%a") == "Tue" ) | {id: .id, title:.title, date:.date_published}'選擇items屬性後,此篩選器使用。[]迭代每個項。篩選器的主要部分使用select函式僅保留那些具有date\u published值且其工作日(strftime(“%a”)為週二的文章。strftime函式需要過濾器[0:19]+“Z”構造的格式非常明確的日期。
在選擇所需的項之後,最終的過濾器為每個項構建一個物件,其中包含必需的欄位。請注意,每次feed發生變化時,結果都會有所不同。以下是出版時的一個例子:
{ "id": "959667930", "title": "Deplatforming: Not A First Amendment Issue, But Still A Tough Call For Big Tech", "date": "2021-01-26T17:00:00-05:00"}{ "id": "960679189", "title": "My Pillow CEO Mike Lindell Permanently Suspended From Twitter", "date": "2021-01-26T10:17:15-05:00"}{ "id": "960220477", "title": "Is Your 401(k) Colluding To Make Cereal More Expensive?", "date": "2021-01-26T06:31:24-05:00"}另請參見:JSON Python解析:簡單指南
如果您想在下載jq之前試用它,jqplay是一個完美的開始。透過一個簡單的介面,站點允許您輸入示例JSON和過濾器,然後檢視結果。
它還允許您嘗試幾個不同的選項。其中包括--compact output(刪除空白)和--null input(顯示缺少輸入的結果)。
該介面還包括一個非常有用的備忘部分。下面是前一個長示例的螢幕截圖:
請注意,與該連結一樣,您也可以透過URL共享示例。
你可以從jq網站上的教程和手冊中找到關於jq的完整資訊。程式本身透過--help選項提供有限的幫助。
如果您想執行基本的過濾和轉換,或者讀取大量的JSON,jq是一個很有價值的工具。
...要優點是簡化了資料共享過程。資料可以從程式中提取並轉換為XML。該檔案可以與其他程式或平臺共享。它使得資料在不同的不相容系統之間建立和傳輸變得容易。 在HTML中,程式設計師必須每次更改資料以顯示動態資料。使用...
...。機器無法理解它們。因此,人類可讀可理解的程式必須轉換成機器可理解的格式。機器可理解的程式碼被稱為機器程式碼。使用C語言將整個機器程式碼轉換為C語言。有些程式語言將原始碼轉換為中間程式碼,然後將中間程式...
...而目的碼是機器語言中的語句序列,是編譯器或彙編程式轉換原始碼後的輸出。 目錄 1. 概述和主要區別 2. 什麼是原始碼 3. 什麼是目的碼 4.原始碼和目的碼的相似性 5. 並行比較-原始碼與目的碼的表格形式 6. 摘要 什麼是原始碼(...
...ript(AJAX)和開發restfulweb服務。它也可以與許多語言一起使用,如java、C++、C++、Python。JSON的一些資料型別有Number、Boolean、String、Array、Object、Null。JSON語法是使用鍵值對,資料用逗號分隔。 圖01:JSON 下面是一個JSON物件的例子。 ...
...式可以編譯或解釋以供執行。反編譯器有助於將目標程式轉換回其原始源程式。需要注意的是,術語源程式和目標程式是作為相關術語使用的。如果你使用一個程式轉換程式(比如編譯器),輸入的是源程式,輸出的是目標程式...
...您有一個包含JSON資料的字串時,可以使用以下命令將其轉換為python物件(或列表): ...
... 今天我將向您展示如何使用JSON將資料從JavaScript傳送到Python。我將介紹如何設定一個web伺服器,以及您需要的所有程式碼。 ...
...個天氣API。要麼是這樣,要麼是為每個訪問者或應用程式使用者手動檢查天氣。顯然,這樣做是不可能的。 ...
... ObjGen在左側視窗中獲取輸入,並在右側視窗中將其轉換為JSON,後者儲存在瀏覽器中,或儲存一個JSON檔案供以後使用。非常適合任何學習資料視覺化和全棧web開發的人。 ...
... NoCodeAPI提供了許多API,包括貨幣轉換器API。要連線到其貨幣交換端點,請轉到NoCodeAPI市場並建立一個帳戶。 ...