다음 코드 조각을 JSON으로 내보냅니다.
{
"daisy": {
"dev": {
"app_url": "example.com",
"owner": "bob",
"createat": "2022-06-17T15:31:58Z",
}
}
}
{
"daisy": {
"dev": {
"appname": "daisy",
"flavor": [
"nodejs"
],
"file": "manifests/daisy.yml"
}
}
}
나는 이 객체들을 다음과 같이 결합하고 싶습니다:
{
"daisy": {
"dev": {
"app_url": "example.com",
"owner": "bob",
"createat": "2022-06-17T15:31:58Z",
"appname": "daisy",
"flavor": [
"nodejs"
],
"file": "manifests/daisy.yml"
}
}
}
어떻게 해야 합니까 jq
?
답변1
두 개체를 곱하면 병합됩니다. 다음은 reduce
기존 객체를 하나씩 병합하여 지속적으로 새로운 객체를 생성하는 데 사용됩니다.
이를 수행하는 두 가지 유사한 방법이 있습니다.
사용
-n
및inputs
:reduce
jq -n 'reduce inputs as $item ({}; . *= $item)' file
inputs
전달된 객체를 하나씩 반환하는 함수를 사용합니다 . ( ) 와-n
함께 사용하면--null-input
일반적인 입력 읽기를 비활성화할 수 있습니다.사용
-s
및.[]
:reduce
jq -s 'reduce .[] as $item ({}; . *= $item)' file
이는 원시 데이터
-s
(--slurp
)를 배열로 읽고reduce
배열을 반복하는 데 사용됩니다. 입력이 크면 메모리가 매우 비효율적이고 속도가 느려질 수 있습니다.
데이터에 대한 결과( createat
행에서 쉼표를 제거하여 수정):
{
"daisy": {
"dev": {
"app_url": "example.com",
"owner": "bob",
"createat": "2022-06-17T15:31:58Z",
"appname": "daisy",
"flavor": [
"nodejs"
],
"file": "manifests/daisy.yml"
}
}
}
두 개 이상의 객체가 동일한 키를 공유하고 해당 키가스칼라또는대량으로이면 입력의 후속 개체가 이 값을 덮어씁니다.