Xử lý JSON trên giao diện dòng lệnh Linux
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 that
sed
,awk
,grep
and 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ới
grep
,sed
và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
All rights reserved