2016-06-08 20 views
9

Tôi đang sử dụng jq để cải cách JSON của mình.Concat 2 trường trong JSON bằng cách sử dụng jq

JSON String:

{"channel": "youtube", "profile_type": "video", "member_key": "hello"}

Wanted đầu ra:

{"channel" : "profile_type.youtube"}

lệnh của tôi:

echo '{"channel": "youtube", "profile_type": "video", "member_key": "hello"}' | jq -c '. | {channel: .profile_type + "." + .member_key}' 

Tôi biết rằng các lệnh dưới đây concatenates chuỗi. Nhưng nó không hoạt động trong cùng một logic như trên:

echo '{"channel": "youtube", "profile_type": "video", "member_key": "hello"}' | jq -c '.profile_type + "." + .member_key' 

Tôi có thể đạt được kết quả bằng cách sử dụng CHỈ jq?

+0

Tôi nghĩ rằng tôi đang cố gắng làm chính xác điều tương tự với tập lệnh API youtube của mình;) –

Trả lời

15

Sử dụng dấu ngoặc xung quanh chuỗi đang nối của bạn:

echo '{"channel": "youtube", "profile_type": "video", "member_key": "hello"}' | jq '{channel: (.profile_type + "." + .channel)}' 
+0

Cân nhắc sử dụng nội suy chuỗi thay thế, sạch hơn nhiều so với nhiều chuỗi nối. –

3

Dưới đây là một giải pháp sử dụng chuỗi suy như Jeff gợi ý:

{channel: "\(.profile_type).\(.member_key)"} 

ví dụ

$ jq '{channel: "\(.profile_type).\(.member_key)"}' <<EOF 
> {"channel": "youtube", "profile_type": "video", "member_key": "hello"} 
> EOF 
{ 
    "channel": "video.hello" 
} 
Các vấn đề liên quan