빈 배열이 있는 .json 파일을 인식하시겠습니까?

빈 배열이 있는 .json 파일을 인식하시겠습니까?

여러 개의 .json 파일이 있는 폴더가 있습니다. 일부 파일에는 빈 배열이 있습니다. 예시 파일은 다음과 같습니다.

{
"WarehouseActivity": []
}

이 파일에는 위에 표시된 것 이외의 데이터가 없습니다.

이러한 파일을 식별하여 오류 폴더로 이동해야 합니다. 이 문제를 해결하는 방법에 대한 제안이 있으면 좋을 것입니다.

고마워요, 캐빈

답변1

mkdir -p error_folder &&
for json in ./*.json; do
    if jq -e '.. | select(type == "array" and length == 0)' "$json" >/dev/null
    then
        mv "$json" error_folder/
    fi
done

이는 로마가 취한 접근 방식과 거의 동일합니다.그의 대답, 그러나 다른 jq표현을 사용합니다.

이 표현식은 ..|select(type == "array" and length == 0)전체 JSON 구조에 대해 반복되며 그 안의 길이가 0인 배열 비트(모든 위치, 깊이)를 모두 선택합니다.

select()성공 하면 jq종료 상태가 0(성공)으로 종료됩니다. 이는 JSON 문서의 어딘가에 빈 배열이 포함되어 있음을 의미합니다(또는 파일이 완전히 비어 있음). 그러면 문서가 error_folder스크립트로 이동됩니다.


아래 설명을 보면 사용자가 arrays에만 관심이 있다는 것이 분명합니다 WarehouseActivity.

jq내 코드의 수정된 표현:

mkdir -p error_folder &&
for json in ./*.json; do
    if jq -e '.. | .WarehouseActivity? | select(type == "array" and length == 0)' "$json" >/dev/null
    then
        mv "$json" error_folder/
    fi
done

답변2

Jq처리/분석에 적합한 도구가 될 것입니다.JSON데이터:

for f in *.json; do
    if jq -e 'keys_unsorted as $keys
              | ($keys | length == 1) 
                and .[($keys[0])] == []' "$f" > /dev/null; then
        mv "$f" error_dir/
    fi
done

관련 정보