2015-10-28 45 views
0

JSON输入我有这个输入:JQ解析与变量

{ 
    "users": [ 
    { 
     "name": "tester-01", 
     "user": { 
     "username": "tester01" 
     } 
    }, 
    { 
     "name": "tester-02", 
     "user": { 
     "username": "tester02" 
     } 
    } 
    ], 
    "current-user": "tester-02" 
} 

使用JQ(1.5),我想打印当前用户相匹配的用户名。

任何人都可以分享这将如何完成或提示让我开始?

+0

我想出了: JQ -r” “当前用户” 为$ foo的| .users [] |选择(.name == $ foo).user' 是否有替代方案? – user3694539

+1

这可能是codereview.stackexchange.com的主题,但我认为您需要更具体地了解您认为可以改进的内容 – chepner

+0

@ user3694539您似乎是解决此问题的标准解决方案。你应该把它作为答案。 – nwk

回答

2

这是我的解决方案。

cat 99 | jq -r '."current-user" as $foo | .users[] | select(.name == $foo).user' 
{ 
    "username": "tester02" 
} 
+0

这几乎是我会如何做到的。 –

+0

'-r'不是必需的,因为您输出的是JSON对象,而不是字符串值。 – chepner

0

选择解决方案是不错的。这是一个替代方案,使用foreach

foreach .users[] as $u (
    ."current-user" 
    ; . 
    ; if . == $u.name then $u.user.username else empty end 
)