轉換json並使用jq使其可讀

需要對大量的JSON資料進行排序嗎?學習如何使用jq使其可讀和有用。...

JavaScript物件表示法(JSON)是世界上最流行的資料格式之一。它有廣泛的支援和一個簡單的規範。在許多程式語言中使用它很容易,特別是那些針對web開發的語言。

A stylised, rotated screenshot of some JSON data

但是手工檢查JSON資料仍然很尷尬。儘管JSON資料集是一種人類可讀的文字格式,但它可能包含大量的資料。原始碼並不總是以易於閱讀的形式格式化JSON。

javajq工具允許使用者格式化、過濾和轉換JSON資料。

什麼是jq公司(jq)?

因為它是一個命令列工具,所以通常使用jq的方法是在終端中鍵入命令。還有一個很好的線上遊樂場,我們將在下面詳細介紹。

正常的操作是圍繞過濾器和過濾器對一些輸入JSON的應用。您可以使用jq從多個專案的集合中獲取單個專案。或者可以從集合中的每個項中刪除某些欄位,從而簡化資料。您甚至可以執行復雜的操作,將輸入轉換為不同的形式。

如何下載和安裝jq

jq程式沒有外部依賴性,這意味著它很容易啟動。首先透過jq主頁上的按鈕下載Linux、macOS或Windows的可執行二進位制檔案。一旦下載了程式,就可以直接從命令列執行它。為了方便起見,您可能需要重新命名它(mvjq-osx-amd64 jq),並且您可能需要使它可執行(chmod+xjq)。

透過從命令列不帶引數地執行jq,確認可以執行jq:

$ ./jq

您應該看到一些常規用法資訊,從一個簡單的單行摘要開始,例如:

jq - commandline JSON processor [version 1.6]

如果你掙扎於上述方法,還有其他選擇。jq軟體支援常見的包管理器,您可以同時嘗試線上沙盒。

jq基本用法

標準用法是:

jq [opti***] <jq filter> [file...]

例如:

$ jq '.' data.json

您也可以透過另一個命令匯入輸入,例如:

$ echo '{"name":"john"}' | jq '.'{ "name": "john"}

例如,當第一個命令類似於對curl的呼叫時,這是最有用的,curl可以從web服務獲取JSON資料。

這些示例中顯示的過濾器是最簡單的。(一個句點),它以漂亮的形式列印輸入。這已經非常有用了,但是jq的濾波器提供的功率遠遠超過這個。

如何使用jq對json應用基本過濾器

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例子

由於jq處理任何透過管道傳輸到它的有效JSON,因此可以透過curl命令向它傳送輸出。這允許您從URL獲取JSON並立即在命令列上處理它:

JSON提要是RSS和Atom格式的JSON替代品。NPR站點就是一個支援JSON提要的例子,但很難從原始碼檢視,並且包含大量資料:

NPR feed

很快,您就可以看到,透過獲取這些資料並透過jq進行管道傳輸,讀取起來是多麼容易:

$ curl -s https://feeds.npr.org/1019/feed.json | jq '.'

Prettified NPR feed

下面是一個更完整的過濾器示例,它獲取站點在星期二釋出的每個故事的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解析:簡單指南

如何使用jqplay線上處理json

如果您想在下載jq之前試用它,jqplay是一個完美的開始。透過一個簡單的介面,站點允許您輸入示例JSON和過濾器,然後檢視結果。

它還允許您嘗試幾個不同的選項。其中包括--compact output(刪除空白)和--null input(顯示缺少輸入的結果)。

該介面還包括一個非常有用的備忘部分。下面是前一個長示例的螢幕截圖:

A screenshot of the jq play online playground

請注意,與該連結一樣,您也可以透過URL共享示例。

使用jq讀取和操作json資料

你可以從jq網站上的教程和手冊中找到關於jq的完整資訊。程式本身透過--help選項提供有限的幫助。

如果您想執行基本的過濾和轉換,或者讀取大量的JSON,jq是一個很有價值的工具。

  • 發表於 2021-03-27 02:07
  • 閱讀 ( 46 )
  • 分類:程式設計

你可能感興趣的文章

xml(xml)和xsd公司(xsd)的區別

...要優點是簡化了資料共享過程。資料可以從程式中提取並轉換為XML。該檔案可以與其他程式或平臺共享。它使得資料在不同的不相容系統之間建立和傳輸變得容易。 在HTML中,程式設計師必須每次更改資料以顯示動態資料。使用...

  • 發佈於 2020-10-19 03:20
  • 閲讀 ( 40 )

原始碼(source code)和位元組碼(bytecode)的區別

...。機器無法理解它們。因此,人類可讀可理解的程式必須轉換成機器可理解的格式。機器可理解的程式碼被稱為機器程式碼。使用C語言將整個機器程式碼轉換為C語言。有些程式語言將原始碼轉換為中間程式碼,然後將中間程式...

  • 發佈於 2020-10-19 15:49
  • 閲讀 ( 60 )

原始碼(source code)和目的碼(object code)的區別

...而目的碼是機器語言中的語句序列,是編譯器或彙編程式轉換原始碼後的輸出。 目錄 1. 概述和主要區別 2. 什麼是原始碼 3. 什麼是目的碼 4.原始碼和目的碼的相似性 5. 並行比較-原始碼與目的碼的表格形式 6. 摘要 什麼是原始碼(...

  • 發佈於 2020-10-19 18:56
  • 閲讀 ( 189 )

json格式(json)和xml(xml)的區別

...ript(AJAX)和開發restfulweb服務。它也可以與許多語言一起使用,如java、C++、C++、Python。JSON的一些資料型別有Number、Boolean、String、Array、Object、Null。JSON語法是使用鍵值對,資料用逗號分隔。 圖01:JSON 下面是一個JSON物件的例子。 ...

  • 發佈於 2020-10-20 01:35
  • 閲讀 ( 46 )

源程式(source program)和目標程式(object program)的區別

...式可以編譯或解釋以供執行。反編譯器有助於將目標程式轉換回其原始源程式。需要注意的是,術語源程式和目標程式是作為相關術語使用的。如果你使用一個程式轉換程式(比如編譯器),輸入的是源程式,輸出的是目標程式...

  • 發佈於 2020-10-26 14:27
  • 閲讀 ( 50 )

json-python解析:簡單指南

...您有一個包含JSON資料的字串時,可以使用以下命令將其轉換為python物件(或列表): ...

  • 發佈於 2021-03-13 11:20
  • 閲讀 ( 48 )

如何讓python和javascript使用json進行通訊

... 今天我將向您展示如何使用JSON將資料從JavaScript傳送到Python。我將介紹如何設定一個web伺服器,以及您需要的所有程式碼。 ...

  • 發佈於 2021-03-16 01:22
  • 閲讀 ( 72 )

將主頁上的天氣資料與weatherstack api整合

...個天氣API。要麼是這樣,要麼是為每個訪問者或應用程式使用者手動檢查天氣。顯然,這樣做是不可能的。 ...

  • 發佈於 2021-03-19 09:24
  • 閲讀 ( 43 )

使用以下10個基本工具提升您的web開發技能

... ObjGen在左側視窗中獲取輸入,並在右側視窗中將其轉換為JSON,後者儲存在瀏覽器中,或儲存一個JSON檔案供以後使用。非常適合任何學習資料視覺化和全棧web開發的人。 ...

  • 發佈於 2021-03-20 14:01
  • 閲讀 ( 50 )

API如何工作以及如何將它們整合到應用程式中

... NoCodeAPI提供了許多API,包括貨幣轉換器API。要連線到其貨幣交換端點,請轉到NoCodeAPI市場並建立一個帳戶。 ...

  • 發佈於 2021-03-29 15:48
  • 閲讀 ( 52 )
無節操王子
無節操王子

0 篇文章

作家榜

  1. admin 0 文章
  2. 孫小欽 0 文章
  3. JVhby0 0 文章
  4. fvpvzrr 0 文章
  5. 0sus8kksc 0 文章
  6. zsfn1903 0 文章
  7. w91395898 0 文章
  8. SuperQueen123 0 文章

相關推薦