2016-11-01 8 views
-1

У меня есть некоторый входной JSON данные, которые я хотел бы, чтобы извлечь значения переменных во что-то я могу вставить в мой сценарийс помощью JQ для перебора данных JSon

вход образца:

{ 
    "menu": { 
    "props": [{ 
     "name": "foo1", 
     "model": "bar1" 
    }, { 
     "name": "foo2", 
     "model": "bar2" 
    }, { 
     "name": "foo3", 
     "model": "bar3" 
    }, { 
     "name": "foo4", 
     "model": "bar4" 
    }, { 
     "name": "foo5", 
     "model": "bar5" 
    }] 
    } 
} 

желаемый результат :

AddMenuItem(menu, "bar1", "foo1"); 
AddMenuItem(menu, "bar2", "foo2"); 
AddMenuItem(menu, "bar3", "foo3"); 
...etc 

ответ

1

что-то, как это будет работать:

$ jq -r '.menu.props[] | "AddMenuItem(menu, \"\(.model)\", \"\(.name)\")"' file.txt 
AddMenuItem(menu, "bar1", "foo1") 
AddMenuItem(menu, "bar2", "foo2") 
AddMenuItem(menu, "bar3", "foo3") 
AddMenuItem(menu, "bar4", "foo4") 
AddMenuItem(menu, "bar5", "foo5") 

-r печатает необработанные данные (не кодируется JSON).

Развертывание массива props с [] и печать строки "AddMenu..." для каждого элемента в указанном массиве.

Можно также использовать ...props | map("AddMenu...")[], что может быть более интуитивно понятным.

\(...) включает интерполяцию строк между ( и ).

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