검사를 통해 배열의 json에서 키와 값을 가져옵니다.

검사를 통해 배열의 json에서 키와 값을 가져옵니다.

나는 JSON을 가지고

[
    {
        "name": "type1",
        "type": "string",
        "values": {
            "set1": "dataA1",
            "set1": "dataA2"
        }
    },
    {
        "name": "type2",
        "type": "string",
        "values": {
            "set1": "dataB1",
            "set2": "dataB2"
        }
    },
    {
        "name": "null",
        "type": "string",
        "values": {
            "set1": "dataC1",
            "set2": "dataC2"
        }
    },
    {
        "name": "type4",
        "type": "string",
        "values": {
            "set1": "dataD1",
            "set2": "dataD2"
        }
    }
]

매우 긴 json이므로 이렇게 만들고 싶습니다.

{
    "type1": {
        "type": "string",
        "values": {
            "set1": "dataA1",
            "set2": "dataA2"
        }
    },
    null: {
        "type": "string",
        "values": {
            "set1": "dataB1",
            "set2": "dataB2"
        }
    },
    "type3": {
        "type": "string",
        "values": {
            "set1": "dataC1",
            "set2": "dataC2"
        }
    },
    "type4": {
        "type": "string",
        "values": {
            "set1": "dataD1",
            "set2": "dataD2"
        }
    }
}

그래서 이것이 더 나은지 아니면 오래된 것을 사용해야하는지 묻고 싶습니다. 이것이 더 낫다면 나는 전에 그것을 사용했습니다jq '.[] | .name, .type' file.json

그런 다음 새로운 json을 사용하여 이와 같은 출력을 얻는 방법

"key"
"type"
"key"
"type"
"key"
"type"

그래서 출력은

type1
string
type2
string
# the type3 and its type is not needed cause its null
type4
string

또한 일부 값 이름이 비어 있으므로 문자열도 비어 있는 것을 원하지 않습니다.

답변1

to_entries그런 다음 비어 있지 않은 키를 선택하고 다음을 사용하여 값을 추출 할 수 있습니다.

jq 'to_entries | map(select(.key != "null"))[] | (.key, .value.type)' < file2.json

답변2

비슷한 생각또 다른 대답name그러나 키 값을 키로 변환 하지 않고 원본 JSON 문서에서 작동합니다 .

$ jq -r 'map( select(.name != "null") | .name, .type )[]'  file
type1
string
type2
string
type4
string

이는 name값이 string 이 아닌 최상위 배열의 모든 항목을 추출합니다 null. 그런 다음 나머지 항목에서 합계 값을 추출합니다 name.type

일반적으로 말하면 사용하는 것이 거의 의미가 없습니다.데이터JSON의 키 값으로 원본 파일을 사용하기로 결정했습니다.

관련 정보