2015-11-14 5 views
1

В моем входе в JQ 1.4 ...JQ: добавить вложенный объект с именем верхнего уровня ключа

{ 
    "key x": { 
     "b": "1" 
    }, 
    "key y": { 
     "b": "1" 
    } 
} 

... следует добавлять новые вложенные объекты под каждой клавишей верхнего уровня с названием его ключ верхнего уровня. Таким образом, результат выглядит

{ 
    "key x": { 
     "a": "key x", 
     "b": "1" 
    }, 
    "key y": { 
     "a": "key y", 
     "b": "1" 
    } 
} 

Но без использования ключевых имен (например, «ключ х» .О = «Ключ х») непосредственно, потому что я не знаю, во время выполнения реальных имен ключей.

ответ

0

Да, нашел решение:

to_entries | map({(.key): ({a: .key}+.value)}) | add 

вернется

{ 
    "key x": { 
    "a": "key x", 
    "b": "1" 
    }, 
    "key y": { 
    "a": "key y", 
    "b": "1" 
    } 
} 

to_entries расщепляется на пар ключ/значение, что гораздо проще получить доступ к каждой клавише и расширить его значение на новый объект.

1

Простой ответ был бы:

with_entries(.value.a = .key) 
+0

Спасибо, решение у короче, чем мой, но в у случае у присоединять всегда новый объект в конце, но и в своем решении я хотел бы добавить, как 1-й объект. – Nic

+0

Хм, хорошо. Объекты JSON обычно обрабатываются как неупорядоченные структуры данных, поэтому это не имеет значения. Каков ваш прецедент? –

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