Bất cứ ai cũng có thể đề xuất một trình phân tích cú pháp JSON (chọn hương vị của bạn) có thể được sử dụng để hướng nội các giá trị từ một phản hồi JSON trong một đường ống dẫn?
Bất cứ ai cũng có thể đề xuất một trình phân tích cú pháp JSON (chọn hương vị của bạn) có thể được sử dụng để hướng nội các giá trị từ một phản hồi JSON trong một đường ống dẫn?
Câu trả lời:
Bạn có thể sử dụng trình phân tích cú pháp dòng lệnh này (mà bạn có thể đặt vào bí danh bash nếu muốn), sử dụng các mô-đun được tích hợp trong lõi Perl:
perl -MData::Dumper -MJSON::PP=from_json -ne'print Dumper(from_json($_))'
perl -e "use JSON; print to_json( decode_json(<>), { pretty => 1 } )"
Tôi thích python -m json.tool
cái dường như có sẵn trên mỗi mặc định trên hầu hết các hệ điều hành * nix mỗi mặc định.
$ echo '{"foo":1, "bar":2}' | python -m json.tool
{
"bar": 2,
"foo": 1
}
Nhưng cần lưu ý rằng điều này sẽ sắp xếp tất cả các khóa theo thứ tự bảng chữ cái, hoặc có thể là một điều tốt trong đó json được tạo bởi một số ngôn ngữ sử dụng HashMaps không có thứ tự ...
json.tool
chỉ là một bàn tay ngắn để in json đẹp. Nếu bạn cần trích xuất / thao tác dữ liệu json trong tập lệnh shell, tôi sẽ sử dụng dữ liệu hoàn jq
toàn tuyệt vời ở những gì đang diễn ra ...
json.tool
mười lần mỗi ngày. Tôi nghĩ rằng tôi đã đọc sai ý nghĩa của "introspec" trong câu hỏi, cảm ơn bạn đã chỉ ra.
json.tool
chỉ thực hiện hai điều: json xác thực và in đẹp. Nó KHÔNG hướng nội các giá trị trong json như jq
không.
Nếu bạn đang tìm kiếm một công cụ biên dịch C di động:
http://stedolan.github.com/jq/
Từ trang web:
jq giống như sed cho dữ liệu JSON - bạn có thể sử dụng nó để cắt và lọc và ánh xạ và biến đổi dữ liệu có cấu trúc một cách dễ dàng mà sed , awk , grep và bạn bè cho phép bạn chơi với văn bản.
jq có thể thu thập định dạng dữ liệu mà bạn có thành một định dạng mà bạn muốn với rất ít nỗ lực và chương trình để làm điều đó thường ngắn hơn và đơn giản hơn bạn mong đợi.
Hướng dẫn : http://stedolan.github.com/jq/tutorial/
Hướng dẫn : http://stedolan.github.com/jq/manual/
Tải xuống : http://stedolan.github.com/jq/doad/
apt install jq
.
jq
.
Tôi đã tạo một mô-đun được thiết kế riêng cho thao tác JSON dòng lệnh:
https://github.com/ddopson/underscore-cli
Nó cho phép bạn làm những việc mạnh mẽ thực sự dễ dàng:
cat earthporn.json | underscore select '.data .title'
# [ 'Fjaðrárgljúfur canyon, Iceland [OC] [683x1024]',
# 'New town, Edinburgh, Scotland [4320 x 3240]',
# 'Sunrise in Bryce Canyon, UT [1120x700] [OC]',
# ...
# 'Kariega Game Reserve, South Africa [3584x2688]',
# 'Valle de la Luna, Chile [OS] [1024x683]',
# 'Frosted trees after a snowstorm in Laax, Switzerland [OC] [1072x712]' ]
cat earthporn.json | underscore select '.data .title' | underscore count
# 25
underscore map --data '[1, 2, 3, 4]' 'value+1'
# prints: [ 2, 3, 4, 5 ]
underscore map --data '{"a": [1, 4], "b": [2, 8]}' '_.max(value)'
# [ 4, 8 ]
echo '{"foo":1, "bar":2}' | underscore map -q 'console.log("key = ", key)'
# key = foo
# key = bar
underscore pluck --data "[{name : 'moe', age : 40}, {name : 'larry', age : 50}, {name : 'curly', age : 60}]" name
# [ 'moe', 'larry', 'curly' ]
underscore keys --data '{name : "larry", age : 50}'
# [ 'name', 'age' ]
underscore reduce --data '[1, 2, 3, 4]' 'total+value'
# 10
Và nó có một trong các trình định dạng JSON "khoảng trắng thông minh" tốt nhất hiện có:
Nếu bạn có bất kỳ yêu cầu tính năng nào, hãy bình luận về bài đăng này hoặc thêm một vấn đề trong github. Tôi rất vui khi ưu tiên các tính năng cần thiết cho các thành viên của cộng đồng.
wget
mỗi URL.
underscore
để phân tích json lồng nhau có các đối tượng và mảng lồng nhau không?
Thanh toán TickTick .
Đó là một trình phân tích cú pháp Bash JSON thực sự.
#!/bin/bash
. /path/to/ticktick.sh
# File
DATA=`cat data.json`
# cURL
#DATA=`curl http://foobar3000.com/echo/request.json`
tickParse "$DATA"
echo ``pathname``
echo ``headers["user-agent"]``
Ngoài ra còn có bộ công cụ xử lý dòng lệnh JSON nếu bạn tình cờ có node.js và npm trong ngăn xếp của bạn.
Và một lệnh "json" khác để tạo khối JSON trên dòng lệnh Unix của bạn.
Và đây là những lựa chọn thay thế khác:
Liên quan: Công cụ dòng lệnh để phân tích cú pháp đầu vào JSON cho Unix?
npm install json
.
json
dường như bị chiếm bởi một gói hoàn toàn khác.
Bất cứ ai cũng đề cập đến Jshon hoặc JSON.sh?
https://github.com/keenerd/jshon
pipe json với nó, và nó đi ngang qua các đối tượng json và in ra đường dẫn đến đối tượng hiện tại (dưới dạng một mảng JSON) và sau đó là đối tượng, không có khoảng trắng.
http://kmkeen.com/jshon/
Jshon tải văn bản json từ stdin, thực hiện các hành động, sau đó hiển thị hành động cuối cùng trên thiết bị xuất chuẩn và cũng được coi là một phần của đường dẫn xử lý văn bản thông thường.
brew install jshon
,cat *.json | jshon
Bạn có thể thử jsawk như đề xuất trong câu trả lời này .
Thực sự bạn có thể đánh lên một kịch bản python nhanh để làm điều này mặc dù.
Đối với Bash / Python , đây là một trình bao bọc cơ bản xung quanh python simplejson
:
json_parser() {
local jsonfile="my_json_file.json"
local tc="import simplejson,sys; myjsonstr=sys.stdin.read(); "`
`"myjson=simplejson.loads(myjsonstr);"
# Build python print command based on $@
local printcmd="print myjson"
for (( argn=1; argn<=$#; argn++ )); do
printcmd="$printcmd['${!argn}']"
done
local result=$(python -c "$tc $printcmd.keys()" <$jsonfile 2>/dev/null \
|| python -c "$tc $printcmd" <$jsonfile 2>/dev/null)
# For returning space-separated values
echo $result|sed -e "s/[]|[|,|']//g"
#echo $result
}
Nó thực sự chỉ xử lý kiểu dữ liệu từ điển lồng nhau, nhưng nó hoạt động cho những gì tôi cần, và rất hữu ích cho việc đi qua json. Nó có thể thích nghi với hương vị.
Dù sao, một cái gì đó nhà cho những người không muốn nguồn trong một phụ thuộc bên ngoài khác. Ngoại trừ trăn, tất nhiên.
Ví dụ. json_parser {field1} {field2}
sẽ chạy print myjson['{field1}']['{field2}']
, mang lại các khóa hoặc các giá trị được liên kết với {field2}
, được phân tách bằng dấu cách.
Tôi chỉ tạo ra jkid , một trình thám hiểm json dòng lệnh nhỏ mà tôi đã thực hiện để dễ dàng khám phá các đối tượng json lớn. Các đối tượng có thể được khám phá "theo chiều ngang" và có tùy chọn "xem trước" để tránh tràn giao diện điều khiển.
$ echo '{"john":{"size":20, "eyes":"green"}, "bob":{"size":30, "eyes":"brown"}}' > test3.json
$ jkid . eyes test3.json
object[.]["eyes"]
{
"bob": "brown",
"john": "green"
}
jkid
trong mac?