2015-03-03 16 views
5

Tôi mới vào JQ và phải đối mặt với một vấn đề khi phân tách json tôiBắt dữ liệu từ json sử dụng JQ khi quan trọng là số chuỗi

Tôi có một json lưu trữ trong một biến như thế này

temp='{ "1": { "my_name": "one" }, "2": { "my_name": "two" } }' 

Bây giờ tôi cần phải nhận được giá trị của MY_NAME cho cả hai mục khác

tôi đã thử một cái gì đó như thế này

echo $temp | jq '.1' //out put 0.1 
I was assuming to get { "my_name": "one" } 

Và tương tự để có được giá trị MY_NAME tôi đã làm

echo $temp | jq '.1.my_name' // Its output is giving me error 

Bất kỳ một thể xin vui lòng giúp đỡ để xác định những gì là sai với cú pháp của tôi và làm thế nào tôi có thể sửa chữa nó.

Cảm ơn

+2

xin vui lòng chỉnh sửa câu hỏi của bạn để bao gồm lệnh chính xác và thông báo lỗi bạn đang nhận được. Ngoài ra, tôi lập trình vỏ, nó là một quy tắc tốt của ngón tay cái để báo giá bất kỳ sử dụng biến (ngoại trừ một vài trường hợp đặc biệt). 'echo" $ temp "| ... 'có thể giúp. Chúc may mắn. – shellter

+0

Hi @shellter gói nó xung quanh các dấu ngoặc kép vẫn cho kết quả tương tự. – user2243651

+0

nhận xét của tôi về "echo" $ temp "' có nghĩa là một lời khuyên chung chung. Tôi không có ý nói nó sẽ giải quyết vấn đề của bạn. Tôi tin rằng '1' upvote cho bình luận của tôi là cho yêu cầu của tôi rằng bạn chỉnh sửa câu hỏi của bạn để bao gồm lệnh chính xác bạn đang thực hiện và văn bản chính xác của thông báo lỗi bạn đang nhận được. Chúc may mắn. – shellter

Trả lời

5

Chỉ số được hiểu là phao. Bạn cần phải sử dụng nó trong một bối cảnh mà nó là một chuỗi khóa rõ ràng.

echo "$temp" | jq '.["1"]["my_name"]' 

echo "$temp" | jq '.["1"]' 

để có được những dict chứa.

Với đầy đủ mới jq (Tôi nghĩ> = 1,4), bạn cũng có thể nói

echo "$temp" | jq '."1".my_name' 
1

Bất cứ khi nào bạn đang cố gắng để tham khảo một chìa khóa đó không phải là một định danh hợp lệ, bạn phải trích dẫn nó. Xem manual để biết thêm chi tiết.

Để chọn mục dưới phím 1, bạn muốn làm điều này:

."1" 

Đối với câu hỏi khác của bạn về cách để có được những my_name giá trị, bạn có thể làm điều này:

to_entries | map(.value.my_name) 
Các vấn đề liên quan