배열에 다음 내용이 포함된 파일이 있습니다. FAVORITE_FULL
내 Bash 스크립트에서는 이것을 이렇게 부릅니다 .
[
{
"name": "__SOLOPIANO__ by rautemusik (rm.fm)",
"url_resolved":"https://rautemusik-de-hz-fal-stream14.radiohost.de/solopiano?ref=radiobrowser&listenerid=31363235323832333936-326130333a343030303a33373a34323a633466653a346366663a666561373a38393431-3533343132-53747265616d436865636b426f742f302e312e30",
"favicon": "https://i.ibb.co/48KRX7M/solopiano.jpg",
"tags": "ambient,jazz,smooth lounge,smooth,smooth jazz",
"countrycode": "DE",
"language": "english,deutsch german,deutsch,german"
},
{
"name": "- 0 N - Smooth Jazz",
"url_resolved":"http://0n-jazz.radionetz.de/0n-jazz.aac",
"favicon": "http://www.0nradio.com/images/favicon/mstile-144x144.png",
"tags": "ambient,jazz,smooth lounge,smooth,smooth jazz",
"countrycode": "DE",
"language": "german"
},
...
]
이 과정에서 파일에 JSON을 생성합니다. 나는 TEMP_FILE2
그것을 내 스크립트에서 부릅니다.
{
"name": ".977 Smooth Jazz",
"url_resolved":"http://19353.live.streamtheworld.com:3690/977_SMOOJAZZ_SC",
"favicon": "http://977music.com/images/logo.gif",
"tags": "jazz,smooth jazz",
"countrycode": "US",
"language": "english"
}
이제 다음을 기반으로 시도했습니다 TEMP_FILE2
.FAVORITE_FULL
이 스레드.
1.
jq '.[] += ["$TEMP_FILE2"]' "$FAVORITE_FULL" "$TEMP_FILE2"
그러면 다음 오류가 반환됩니다.
jq: error (at /Users/shinichiokada/.tera/favorite.json:33): object ({"name":"__...) and array (["$TEMP_FIL...) cannot be added
jq: error (at /tmp/tera_favorite2.json:1): Cannot iterate over null (null)
jq --argjson TEMP "$(cat "$TEMP_FILE2")" '.[] += [$TEMP]' "$FAVORITE_FULL"
그러면 다음 오류가 반환됩니다.
jq: error (at /Users/shinichiokada/.tera/favorite.json:33): object ({"name":"__...) and array ([{"changeuu...) cannot be added
한 파일의 JSON을 다른 파일의 배열에 추가하는 방법은 무엇입니까?
답변1
jq '. += [input]' "$FAVORITE_FULL" "$TEMP_FILE2"
그러면 [input]
배열에 +=
. 이 함수는 input
다음 입력 파일을 읽습니다 . 여기서는 이를 사용하여 배열의 $TEMP_FILE2
내용을 읽습니다 .$FAVORITE_FULL
+=
또는,
jq '[ .[], input ]' "$FAVORITE_FULL" "$TEMP_FILE2"
그러면 첫 번째 파일의 배열이 확장된 다음 두 번째 파일의 개체가 마지막 요소인 새 배열이 생성됩니다.
--slurp
또는 다음을 사용할 수도 있습니다 -s
.
jq -s '.[0] += [.[1]] | .[0]' "$FAVORITE_FULL" "$TEMP_FILE2"
.[0]
그러면 첫 번째 파일의 배열이 에 추가 되고 개체가 에 추가되어 모든 입력 파일을 배열로 읽습니다 .[1]
. 그런 다음 새 개체에 대한 배열을 만들고 [.[1]]
이를 배열에 추가합니다. 마지막으로 업데이트된 배열을 출력합니다 .[0]
.
위의 대체 솔루션과 동일한 변형:
jq -s '[ .[0][], .[1] ]' "$FAVORITE_FULL" "$TEMP_FILE2"
--argjson
또한 귀하의 시도에는 약간의 조정 만 필요하다는 것을 알았습니다 .
jq --argjson t "$(cat "$TEMP_FILE2")" '. += [$t]' "$FAVORITE_FULL"
(객체 세트, 확장 배열) .
대신 (배열)을 참고하세요 ..[]
또는 다음을 사용하십시오 --slurpfile
.
jq --slurpfile t "$TEMP_FILE2" '. += $t' "$FAVORITE_FULL"
$t
여기 보다는 주목해주세요 [$t]
. 후루룩 모드를 사용할 때 후루룩한 데이터는 $t
마지막 예에서 단일 개체를 포함하는 배열과 마찬가지로 항상 배열에 배치됩니다.$TEMP_FILE2