jq를 사용한 JSON 변환

jq를 사용한 JSON 변환

json을 개행으로 구분된 json으로 변환하고 싶습니다. Bash에서 jq를 사용하여 이 작업을 여러 번 시도했지만 최종 출력에 가까워질 수 없었습니다.

입력하다:

{
    "windows124": {
        "updated": "2015-01-14",
        "attribution": [],
        "description": "",
        "notes": [],
        "alt_names": [],
        "sources": [],
        "urls": ["google.com", "google.co.uk"],
        "common_name": "test",
        "uuid": "7259334c-3218-4259-aaab-896d87507f4f"
    },
    "linux124": {
        "updated": "",
        "attribution": ["Naifdddkoscn"],
        "description": "",
        "notes": [],
        "alt_names": [],
        "sources": [],
        "urls": ["https://example.com/1.pdf", "https://example.com/1.pdf", "https://example.com/1.pdf"],
        "common_name": "121212",
        "uuid": "009db412-762d-4256-8df9-eb213be01ffd"
    },
    "wikipedia123": {
        "updated": "2018-07-31",
        "attribution": [],
        "description": "",
        "notes": [],
        "alt_names": [],
        "sources": [],
        "urls": ["https://example.com/1.pdf"],
        "common_name": "test343",
        "uuid": "4d8da0af-cfd7-4990-b211-af0e990vfda0"
    }
}

원하는 출력:

{"uuid": "7259334c-3218-4259-aaab-896d87507f4f","family": "windows124","updated": "2015-01-14","attribution": [],"description": "","notes": [],"alt_names": [],"sources": [],"urls": ["google.com", "google.co.uk"],"common_name": "test"}
{"uuid": "009db412-762d-4256-8df9-eb213be01ffd","family": "linux124", "updated": "","attribution": ["Naifdddkoscn"],"description": "","notes": [],"alt_names": [],"sources": [],"urls": ["https://example.com/1.pdf", "https://example.com/1.pdf", "https://example.com/1.pdf"],"common_name": "121212"}
{"uuid": "4d8da0af-cfd7-4990-b211-af0e990vfda0","family": "wikipedia123", "updated": "2018-07-31","attribution": [],"description": "","notes": [],"alt_names": [],"sources": [],"urls": ["https://example.com/1.pdf"],"common_name": "test343"}

지금까지 내가 가진 것은 다음과 같습니다. cat deserialize.json | jq -c '.|to_entries[]'

{"key":"windows124","value":{"updated":"2015-01-14","attribution":[],"description":"","notes":[],"alt_names":[],"sources":[],"urls":["google.com","google.co.uk"],"common_name":"test","uuid":"7259334c-3218-4259-aaab-896d87507f4f"}}
{"key":"linux124","value":{"updated":"","attribution":["Naifdddkoscn"],"description":"","notes":[],"alt_names":[],"sources":[],"urls":["https://example.com/1.pdf","https://example.com/1.pdf","https://example.com/1.pdf"],"common_name":"121212","uuid":"009db412-762d-4256-8df9-eb213be01ffd"}}
{"key":"wikipedia123","value":{"updated":"2018-07-31","attribution":[],"description":"","notes":[],"alt_names":[],"sources":[],"urls":["https://example.com/1.pdf"],"common_name":"test343","uuid":"4d8da0af-cfd7-4990-b211-af0e990vfda0"}}

답변1

이 jq 필터를 사용할 수 있습니다.

<file jq 'to_entries|map(.value + {family:(.key)})[]'

아시다시피 이 to_entries기능을 사용하면 키 이름을 가져와 속성을 추가할 수 있습니다 family.

따라서 필터는 이 객체를 생성하고 family함수에 제공된 항목에 추가합니다.valueto_entries

map함수는 배열의 모든 요소에 대해 더하기 연산을 수행합니다 value.

마지막으로 []외부 배열이 제거되었습니다.

출력 순서는 게시한 방법과 다르지만 내용은 동일하므로 참고하세요. 키를 정렬하려면 옵션을 사용하십시오 -S.

답변2

jq -c 'with_entries(.value.family = .key)[]' file.json

또는,

jq -c 'with_entries(.value += { family: .key })[]' file.json

이렇게 하면 해당 요소의 키 값(예: 첫 번째 요소) family을 사용하여 원래 최상위 개체의 각 하위 요소에 키가 삽입됩니다 . windows124그런 다음 하위 요소를 컬렉션으로 반환하는데, 이는 정확히 원하는 것입니다.

질문에 제공된 문서의 출력:

{"updated":"2015-01-14","attribution":[],"description":"","notes":[],"alt_names":[],"sources":[],"urls":["google.com","google.co.uk"],"common_name":"test","uuid":"7259334c-3218-4259-aaab-896d87507f4f","family":"windows124"}
{"updated":"","attribution":["Naifdddkoscn"],"description":"","notes":[],"alt_names":[],"sources":[],"urls":["https://example.com/1.pdf","https://example.com/1.pdf","https://example.com/1.pdf"],"common_name":"121212","uuid":"009db412-762d-4256-8df9-eb213be01ffd","family":"linux124"}
{"updated":"2018-07-31","attribution":[],"description":"","notes":[],"alt_names":[],"sources":[],"urls":["https://example.com/1.pdf"],"common_name":"test343","uuid":"4d8da0af-cfd7-4990-b211-af0e990vfda0","family":"wikipedia123"}

관련 정보