Xử lý JSON trên giao diện dòng lệnh Linux
jq
1
Linux
81
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

24 bài viết.
220 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
132 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 2 năm trước
132 13
White
82 14
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 gần 3 năm trước
82 14
White
53 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 3 năm trước
53 7
{{like_count}}

kipalog

{{ comment_count }}

bình luận

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


White
{{userFollowed ? 'Following' : 'Follow'}}
24 bài viết.
220 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á!