Xử Lý JSON Trên Giao Diện Dòng Lệnh Linux - Viblo

  • Báo cáo
  • Thêm vào series của tôi

Bài đăng này đã không được cập nhật trong 7 năm

Như chúng ta đã biết, JSON là 1 định dạng dữ liệu mà hiện này được sử dụng rất phỗ biến. Hầu hết các dịch vụ API và data sevices đều sử dụng định dạng JSON. Câu hỏi đặt ra là, làm thế nào để thao tác với định dạng JSON trên giao điện dòng lệnh(command-line)? Bài viết này mình xin giới thiệu cho các bạn 1 công cụ đơn giản và gọn nhẹ để giải quyết vấn đề trên, đó chính là**jq**

Vậyjq là gì?

Trên trang chủ, jq được định nghĩa là:

jq is like sed for JSON data - you can use it to slice and filter and map and transform structured data with the same ease thatsed,awk,grepand friends let you play with text.

Chan sờ lết to Vietnamese thì chúng ta có thể hiểu:

jq là một JSON processor, nó giống như sed nhưng cho JSON data. Dùng nó kết hợp vớigrep,sedvàsed. Ta có thể lọc, cắt, ghép các dữ liệu JSON trên giao diện dòng lệnh của Linux.

Cài đặt

Có thể dễ dàng cái đặt theo tài liệu tại https://stedolan.github.io/jq/download Hoặc bằng lệnh:

# download directly into ~/bin curl http://stedolan.github.io/jq/download/linux64/jq -o ~/bin/jq # give it executable permissions chmod a+x ~/bin/jq

Đối với Arch Linux, có thể cài đặt từ pacman -S jq --noconfirm

Sử dụng jq

Giờ hãy bắt đầu xem jq có thể làm được gì. Ví dụ mình có một file JSON như sau:

$ cat test.json [ { "displayName" : "master", "offline" : false }, { "displayName" : "agent-1", "offline" : true }, { "displayName" : "agent-2", "offline" : false }, { "displayName" : "celery", "offline" : false }, { "displayName" : "kelp", "offline" : false }, { "displayName" : "spinach", "offline" : false }, { } ]

Lấy tất cả các đối tượng

~$ jq '.' test.json ~$ jq '.[]' test.json { "displayName": "master", "offline": false } { "displayName": "agent-1", "offline": true } { "displayName": "agent-2", "offline": false } { "displayName": "celery", "offline": false } { "displayName": "kelp", "offline": false } { "displayName": "spinach", "offline": false } {}

Kiểm tra độ dài

Giờ thử kiểm tra xem có bao nhiêu đối tượng trong file JSON đó

~$ jq 'length' test.json 7

Kiểm tra mỗi đối tượng có bao nhiêu thuộc tính

~$ jq '.[] | length' test.json 2 2 2 2 2 2 0

Lấy thuộc tính của đối tượng

Tiếp đến thử lấy một đối tượng trong file đó. Ví dụ mình muốn lấy phần tử đầu tiên.

~$ jq '.[0]' test.json { "displayName": "master", "offline": false }

Giờ thử lấy một thuộc tính của một đối tượng. Ví dụ muốn kiểm tra trạng thái của đối tượng số số 2.

~$ jq '.[1].offline' test.json false

Sort theo một thuộc tính

Ví dụ mình muốn sort theo displayName

~$ jq 'sort_by(.displayName)' test.json [ {}, { "displayName": "agent-1", "offline": true }, { "displayName": "agent-2", "offline": false }, { "displayName": "celery", "offline": false }, { "displayName": "kelp", "offline": false }, { "displayName": "master", "offline": false }, { "displayName": "spinach", "offline": false } ]

So sánh, điều kiện

Liệt kê các đối tượng có tên là master

~$ jq '.[].displayName == "master"' test.json true false false false false false false

Lời kết

Trên đây là một số xử lý đơn giản, để tìm hiểu thêm về jq bạn có thể truy cập vào trang https://stedolan.github.io/jq/manual/ để đọc thêm. Hẹn gặp lại trong bài viết tiếp theo.

References

  • https://stedolan.github.io/jq/manual/
  • https://kipalog.com/posts/Xu-ly-JSON-tren-giao-dien-dong-lenh-Linux
  • http://www.compciv.org/recipes/cli/jq-for-parsing-json/
JSON Linux

All rights reserved

  • Báo cáo
  • Thêm vào series của tôi

Từ khóa » Hàng Jq Là Gì