jq를 사용하여 기존 JSON 어레이에 새 요소 추가
다음 명령어를 사용하여 요소를 JSON 파일의 배열에 추가합니다.jq``add
명령을 내렸지만 소용없었어요
report-2017-01-07.json
파일:
{
"report": "1.0",
"data": {
"date": "2010-01-07",
"messages": [
{
"date": "2010-01-07T19:58:42.949Z",
"xml": "xml_samplesheet_2017_01_07_run_09.xml",
"status": "OK",
"message": "metadata loaded into iRODS successfully"
},
{
"date": "2010-01-07T20:22:46.949Z",
"xml": "xml_samplesheet_2017_01_07_run_09.xml",
"status": "NOK",
"message": "metadata duplicated into iRODS"
},
{
"date": "2010-01-07T22:11:55.949Z",
"xml": "xml_samplesheet_2017_01_07_run_09.xml",
"status": "NOK",
"message": "metadata was not validated by XSD schema"
}
]
}
}
다음 명령어를 사용하고 있습니다.
$ cat report-2017-01-07.json
| jq -s '.data.messages {"date": "2010-01-07T19:55:99.999Z", "xml": "xml_samplesheet_2017_01_07_run_09.xml", "status": "OKKK", "message": "metadata loaded into iRODS successfullyyyyy"}'
jq: error: syntax error, unexpected '{', expecting $end (Unix shell quoting issues?) at <top-level>, line 1:
.data.messages {"date": "2010-01-07T19:55:99.999Z", "xml": "xml_samplesheet_2017_01_07_run_09.xml", "status": "OKKK", "message": "metadata loaded into iRODS successfullyyyyy"}
jq: 1 compile error
출력은 다음과 같습니다.
{
"report": "1.0",
"data": {
"date": "2010-01-07",
"messages": [{
"date": "2010-01-07T19:58:42.949Z",
"xml": "xml_samplesheet_2017_01_07_run_09.xml",
"status": "OK",
"message": "metadata loaded into iRODS successfully"
}, {
"date": "2010-01-07T20:22:46.949Z",
"xml": "xml_samplesheet_2017_01_07_run_09.xml",
"status": "NOK",
"message": "metadata duplicated into iRODS"
}, {
"date": "2010-01-07T22:11:55.949Z",
"xml": "xml_samplesheet_2017_01_07_run_09.xml",
"status": "NOK",
"message": "metadata was not validated by XSD schema"
}, {
"date": "2010-01-07T19:55:99.999Z",
"xml": "xml_samplesheet_2017_01_07_run_09.xml",
"status": "OKKKKKKK",
"message": "metadata loaded into iRODS successfullyyyyy"
}]
}
}
그|= .+
필터의 일부를 지정하면 기존 배열에 새 요소가 추가됩니다.사용할 수 있습니다.jq
다음과 같은 필터가 있습니다.
jq '.data.messages[3] |= . + {
"date": "2010-01-07T19:55:99.999Z",
"xml": "xml_samplesheet_2017_01_07_run_09.xml",
"status": "OKKK",
"message": "metadata loaded into iRODS successfullyyyyy"
}' inputJson
하드코드된 길이 값을 사용하지 않으려면3
새로운 요소를 동적으로 추가하고. | length
다음 배열 인덱스로 사용할 수 있는 길이를 반환합니다.
jq '.data.messages[.data.messages| length] |= . + {
"date": "2010-01-07T19:55:99.999Z",
"xml": "xml_samplesheet_2017_01_07_run_09.xml",
"status": "OKKK",
"message": "metadata loaded into iRODS successfullyyyyy"
}' inputJson
(또는) 코멘트의 피크에 의한 제안에 따라+=
오퍼레이터만
jq '.data.messages += [{
"date": "2010-01-07T19:55:99.999Z",
"xml": "xml_samplesheet_2017_01_07_run_09.xml",
"status": "OKKK",
"message": "metadata loaded into iRODS successfullyyyyy"
}]'
필요한 출력이 생성됩니다.
{
"report": "1.0",
"data": {
"date": "2010-01-07",
"messages": [
{
"date": "2010-01-07T19:58:42.949Z",
"xml": "xml_samplesheet_2017_01_07_run_09.xml",
"status": "OK",
"message": "metadata loaded into iRODS successfully"
},
{
"date": "2010-01-07T20:22:46.949Z",
"xml": "xml_samplesheet_2017_01_07_run_09.xml",
"status": "NOK",
"message": "metadata duplicated into iRODS"
},
{
"date": "2010-01-07T22:11:55.949Z",
"xml": "xml_samplesheet_2017_01_07_run_09.xml",
"status": "NOK",
"message": "metadata was not validated by XSD schema"
},
{
"date": "2010-01-07T19:55:99.999Z",
"xml": "xml_samplesheet_2017_01_07_run_09.xml",
"status": "OKKK",
"message": "metadata loaded into iRODS successfullyyyyy"
}
]
}
}
jq-play를 사용하여 테스트 실행jq-filter
원하는 방식으로 최적화할 수 있습니다.
사용하는 대신|=
, 를 사용하는 것을 검토합니다.+=
:
.data.messages += [{"date": "2010-01-07T19:55:99.999Z",
"xml": "xml_samplesheet_2017_01_07_run_09.xml",
"status": "OKKK", "message": "metadata loaded into iRODS successfullyyyyy"}]
프리펜드
한편, (@NicHuang의 요구대로) 어레이의 선두에 JSON 오브젝트를 추가하는 경우는, 다음의 패턴을 사용할 수 있습니다.
.data.messages |= [ _ ] + .
개요: "+"는 구세주입니다.
세부사항:
목록에 엔트리를 추가하는 경우:[list1] + [list2] ([list] + 데이터 없음)를 추가할 수 있습니다.
$ echo '[ "data1" ]' | jq '. + [ "data2" ]'
[
"data1",
"data2"
]
$ echo '[ {"key1": "value1"} ]' | jq '. + [{"key2": "value2"}]'
[
{
"key1": "value1"
},
{
"key2": "value2"
}
]
사전에 키/값을 추가하는 경우:
$ echo '{"key1": "value1"}' | jq '. + {"key2": "value2"}'
{
"key1": "value1",
"key2": "value2"
}
참고 자료:
https://gist.github.com/joar/776b7d176196592ed5d8
언급URL : https://stackoverflow.com/questions/42245288/add-new-element-to-existing-json-array-with-jq
'programing' 카테고리의 다른 글
테이블에서 모든 열과 ROWNUM 등의 추가 열을 선택하려면 어떻게 해야 합니까? (0) | 2023.04.05 |
---|---|
Python에서 XML을 JSON으로 변환하는 방법은 무엇입니까? (0) | 2023.04.05 |
JQuery 오류:수집되지 않은 유형 오류: 개체 번호에 메서드 'ready'가 없습니다. (0) | 2023.04.05 |
$$(더블 달러 기호)는 어떤 용도로 사용됩니까? (0) | 2023.04.05 |
이미지 자르기 편집기가 작동하지 않음 (0) | 2023.04.05 |