여러 개의 .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