2016-11-14 2 views
1

У меня есть следующие JSON данные:Дисплей пустая строка для не существующих полей с JQ

{"jsonrpc":"2.0","result":[],"id":1} 
{"jsonrpc":"2.0","result":[{"hostmacroid":"2392","hostid":"10953","macro":"{$GATEWAY}","value":"10.25.230.1"}],"id":1} 
{"jsonrpc":"2.0","result":[{"hostmacroid":"1893","hostid":"12093","macro":"{$GATEWAY}","value":"10.38.118.1"}],"id":1} 
{"jsonrpc":"2.0","result":[{"hostmacroid":"2400","hostid":"14471","macro":"{$GATEWAY}","value":"10.25.230.1"}],"id":1} 
{"jsonrpc":"2.0","result":[{"hostmacroid":"799","hostid":"10798","macro":"{$GATEWAY}","value":"10.36.136.1"}],"id":1} 
{"jsonrpc":"2.0","result":[],"id":1} 
{"jsonrpc":"2.0","result":[{"hostmacroid":"1433","hostid":"10857","macro":"{$GATEWAY}","value":"10.38.24.129"}],"id":1} 
{"jsonrpc":"2.0","result":[{"hostmacroid":"842","hostid":"13159","macro":"{$GATEWAY}","value":"10.38.113.1"}],"id":1} 
{"jsonrpc":"2.0","result":[],"id":1} 

Я пытаюсь извлечь значение поля «значение» из каждой строки. jq -r '.result[].value' <jsonfile> отлично работает, но не учитывает линии JSON, где нет поля «значение». Я бы хотел, чтобы он печатал для них пустую строку. Возможно ли это с помощью jq?

ответ

1

Это будет работать:

jq -r '.result | if length > 0 then .[0].value else "" end' 
1

Вы можете использовать это:

jq -r '.result[].value // "" ' a.json 

Это использует или оператора //. Если присутствует .result[].value, значение будет напечатано, в противном случае печатается пустая строка.

1

С false // X и null // X производитель X, .result[].value // "" может быть не таким, каким вы хотите во всех случаях.

Для достижения поставленной цели, как я понимаю, вы можете использовать следующий фильтр:

.result[] | if has("value") then .value else "" end 

 Смежные вопросы

  • Нет связанных вопросов^_^