Tôi quen thuộc với "jq" để phân tích cú pháp json.
Tôi làm việc với một dịch vụ tạo ra phản hồi json trong đó một trong các thuộc tính chính là chuỗi json. Làm cách nào để chuyển đổi giá trị được trích dẫn đó thành chuỗi json hợp lệ để sau đó tôi có thể xử lý nó với jq?
Chẳng hạn, nếu tôi chỉ xem json được in khá đơn giản từ "jq.", Đây là một đoạn trích ngắn của đầu ra:
"someJsonString": "{\"date\":\"2018-01-08\", ...
Tôi có thể sử dụng jq để lấy giá trị của thuộc tính đó, nhưng tôi cần chuyển đổi chuỗi được trích dẫn thành json hợp lệ bằng cách "hủy bỏ" nó.
Tôi cho rằng tôi có thể chuyển nó thành sed, loại bỏ dấu ngoặc kép mở và kết thúc và xóa tất cả dấu gạch chéo ngược (" sed -e 's/^"//' -e 's/"$//' -e 's/\\//g'
"). Điều đó có vẻ hiệu quả, nhưng đó dường như không phải là giải pháp mạnh mẽ nhất.
Cập nhật :
Nói rõ hơn một chút về những gì tôi đang làm, đây là một vài mẫu thử cho thấy những gì tôi đã thử:
% curl -s -q -L 'http://.../1524.json' | jq '.results[0].someJsonString' | jq .
"{\"date\":\"2018-01-08\",...
% echo $(curl -s -q -L 'http:/.../1524.json' | jq '.results[0].someJsonString') | jq .
"{\"date\":\"2018-01-08\",...
Cập nhật :
Đây là một ví dụ hoàn toàn độc lập:
% cat stuff.json | jq .
{
"stuff": "{\"date\":\"2018-01-08\"}"
}
% cat stuff.json | jq '.stuff'
"{\"date\":\"2018-01-08\"}"
% cat stuff.json | jq '.stuff' | jq .
"{\"date\":\"2018-01-08\"}"
Cập nhật :
Nếu tôi đã cố xử lý đầu ra cuối cùng đó bằng biểu thức jq thực, thì nó sẽ hoạt động như sau:
% cat stuff.json | jq '.stuff' | jq '.date'
assertion "cb == jq_util_input_next_input_cb" failed: file "/usr/src/ports/jq/jq-1.5-3.x86_64/src/jq-1.5/util.c", line 371, function: jq_util_input_get_position
Aborted (core dumped)
echo $(jq statement here)
?
jq
để chỉ lấy giá trị của thuộc tính chuỗi, nó có trả về nó không bị hủy không? Nếu vậy, chỉ cần ống mà vào một tươijq
.