Xử lý JSON trên giao diện dòng lệnh Linux
jq
1
Linux
77
json
6
White

Quăng viết ngày 16/05/2016

jq là một JSON processor, nó giống như sed nhưng cho JSON data. Dùng nó kết hợp với grep, sedawk 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ó thể dễ dàng cái đặt theo tài liệu tại https://stedolan.github.io/jq/download, đối với Arch Linux, có thể cài đặt từ pacman -S jq --noconfirm

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:

:: You are xluffy -at- X220DX [~/tmp]
$ cat locvung.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
  },
  {

  }
]

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

~$ jq '.' locvung.json
~$ jq '.[]' locvung.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
}
{}

2. Kiểm tra độ dài

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

~$ jq 'length' locvung.json
7

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

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

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

Lấy một thuộc tính của tất cả các đối tượng. Ví dụ mình muốn lấy displayName của tất cả 6 đối tượng trên.

~$ jq '.[].displayName' locvung.json

"master"
"agent-1"
"agent-2"
"celery"
"kelp"
"spinach"
null

4. Xử lý trên từng đố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]' locvung.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' locvung.json
false

5. Sort theo một thuộc tính

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

~$ jq 'sort_by(.displayName)' locvung.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
  }
]

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

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

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

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. Trong bài tiếp theo mình sẽ giới thiệu cách mà mình sử dụng jq với Jenkins API để lấy, xử lý các thông tin về Jobs và Nodes.

Happy Monday :scream:

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

Quăng

22 bài viết.
173 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
120 13
Gần đây mình có present về chủ đề __Một số thao tác và lệnh đơn giản nhưng hữu ích khi sử dụng Linux__ cho một vài bạn bè. Mặc dù nó khá là đơn giả...
Quăng viết hơn 1 năm trước
120 13
White
74 12
1. Giới thiệu Right tool for right job. Trước tiên phải hiểu là MySQL Replication không phải là giải pháp giải quyết mọi bài toán về quá tải hệ th...
Quăng viết hơn 2 năm trước
74 12
White
51 7
Với những ai làm Linux System Admin hoặc DevOps thì việc quản lí vài chục, vài trăm server là chuyện bình thường. Việc nhớ các địa chỉ IP, port để ...
Quăng viết gần 3 năm trước
51 7
Bài viết liên quan
White
1 0
sudo du sh
t viết gần 2 năm trước
1 0
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
22 bài viết.
173 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!