Tôi có một tệp JSON members.json
như dưới đây.
{
"took": 670,
"timed_out": false,
"_shards": {
"total": 8,
"successful": 8,
"failed": 0
},
"hits": {
"total": 74,
"max_score": 1,
"hits": [
{
"_index": "2000_270_0",
"_type": "Medical",
"_id": "02:17447847049147026174478:174159",
"_score": 1,
"_source": {
"memberId": "0x7b93910446f91928e23e1043dfdf5bcf",
"memberFirstName": "Uri",
"memberMiddleName": "Prayag",
"memberLastName": "Dubofsky"
}
},
{
"_index": "2000_270_0",
"_type": "Medical",
"_id": "02:17447847049147026174478:174159",
"_score": 1,
"_source": {
"memberId": "0x7b93910446f91928e23e1043dfdf5bcG",
"memberFirstName": "Uri",
"memberMiddleName": "Prayag",
"memberLastName": "Dubofsky"
}
}
]
}
}
Tôi muốn phân tích cú pháp bằng cách sử dụng bash
tập lệnh chỉ lấy danh sách trường memberId
.
Sản lượng dự kiến là:
memberIds
-----------
0x7b93910446f91928e23e1043dfdf5bcf
0x7b93910446f91928e23e1043dfdf5bcG
Tôi đã thử thêm mã bash + python sau đây vào .bashrc
:
function getJsonVal() {
if [ \( $# -ne 1 \) -o \( -t 0 \) ]; then
echo "Usage: getJsonVal 'key' < /tmp/file";
echo " -- or -- ";
echo " cat /tmp/input | getJsonVal 'key'";
return;
fi;
cat | python -c 'import json,sys;obj=json.load(sys.stdin);print obj["'$1'"]';
}
Và sau đó gọi:
$ cat members.json | getJsonVal "memberId"
Nhưng nó ném:
Traceback (most recent call last):
File "<string>", line 1, in <module>
KeyError: 'memberId'
Tài liệu tham khảo
python
, chứ không phải bash
là những gì bạn đang sử dụng để phân tích cú pháp JSON. Ví dụ, lỗi đó chắc chắn là lỗi python, không phải lỗi bash.
python
, không có nghĩa là mục tiêu của anh ta là sử dụngpython