Как я понимаю, вы ищете значение "Фу". Это действительно легко сделать с помощью инструмента командной строки оболочки jq
. Это что-то вроде sed
в том, что он реализует свой собственный тип парсерного языка. В данном примере:
json='
{
"Reservations" :
{
"OwnerId" : "1345345",
"Groups" : [],
"SecurityGroups" : [
{
"Foo" : "yes",
"Bar" : "no"
}
]
}
}'
jq
может получить yes
так же просто, как:
printf %s "$json" |
jq '.[].SecurityGroups[0].Foo?'
"yes"
Вы можете пройтись по хэшу объекта или списку словарных статей, используя нотацию .dot
, а индексированные массивы можно проиндексировать проще, с помощью, как Вы, вероятно, догадались, числовых индексов, заключённых в квадратные скобки. В команде выше я использую форму пустого индекса, чтобы показать, что я хочу, чтобы все элементы этого уровня были развернуты. Это может быть проще понять следующим образом:
printf %s "$json" | jq '.[][]'
... который разбивает все значения для элементов второго уровня в хэше и достает меня...
"1345345"
[]
[
{
"Foo": "yes",
"Bar": "no"
}
]
Это едва царапает поверхность относительно возможностей jq
. Это чрезвычайно мощный инструмент для сериализации данных в оболочке, он компилируется в один исполняемый двоичный файл в классическом Unix-стиле, он, скорее всего, доступен через менеджер пакетов для вашего дистрибутива, и он очень хорошо документирован. Пожалуйста, посетите его git
-страницу и убедитесь сами.
Кстати, другим способом решения проблемы многоуровневых данных в json
- по крайней мере, чтобы получить представление о том, с чем вы работаете - может быть пойти другим путем и использовать . dot
примечание, чтобы пробить все значения на всех уровнях типа:
printf %s "$json" | jq '..'
{
"Reservations": {
"OwnerId": "1345345",
"Groups": [],
"SecurityGroups": [
{
"Foo": "yes",
"Bar": "no"
}
]
}
}
{
"OwnerId": "1345345",
"Groups": [],
"SecurityGroups": [
{
"Foo": "yes",
"Bar": "no"
}
]
}
"1345345"
[]
[
{
"Foo": "yes",
"Bar": "no"
}
]
{
"Foo": "yes",
"Bar": "no"
}
"yes"
"no"
Но гораздо лучше, вероятно, было бы просто использовать один из множества методов обнаружения или поиска, которые jq
предлагает для различных типов узлов.
/ etc / xdg / lxsession / lxde / autostart
, который начинает pcmanfm. OpenBox-LXDE
в / etc / xdg / lxsession / lxde / config
- openbox
. Удалите
<mousebind button="Right" action="Press">
<action name="ShowMenu"><menu>root-menu</menu></action>
</mousebind>
из /etc/xdg/openbox/rc.xml
, затем перезагрузитесь.