JSON 파일을 tsv 파일로 구문 분석하려고합니다. 고유 한 중복 ID를 제거하는 데 문제가 있습니다.
JSON 파일
[
{"Id": "101",
"Name": "Yugi"},
{"Id": "101",
"Name": "Yugi"},
{"Id": "102",
"Name": "David"},
]
cat getEvent_all.json | jq -cr '.[] | [.Id] | unique_by(.[].Id)'
jq : 오류 (: 0) : 문자열 ( "101")을 반복 할 수 없습니다.
합리적인 접근 방식은 다음과 같이 사용하는 것입니다 unique_by
.
unique_by(.Id)[]
| [.Id, .Name]
| @tsv
또는 먼저 쌍을 형성 할 수 있습니다.
map([.Id, .Name])
| unique_by(.[0])[]
| @tsv
uniques_by/2
그러나 매우 큰 배열의 경우 또는 원래 순서를 존중하려면 정렬이 필요없는 대안을 unique_by
고려해야합니다. 다음은 적절하고 일반적인 스트림 지향 대안입니다.
def uniques_by(stream; f):
foreach stream as $x ({};
($x|f) as $s
| ($s|type) as $t
| (if $t == "string" then $s
else ($s|tostring) end) as $y
| if .[$t][$y] then .emit = false
else .emit = true | (.item = $x) | (.[$t][$y] = true)
end;
if .emit then .item else empty end );
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다