programing

CSV로 변환할 수 있도록 개체를 어레이에 매핑하려면 어떻게 해야 합니까?

muds 2023. 3. 17. 22:04
반응형

CSV로 변환할 수 있도록 개체를 어레이에 매핑하려면 어떻게 해야 합니까?

다음과 같은 개체를 변환하려고 합니다.

{
  "123" : "abc",
  "231" : "dbh",
  "452" : "xyz"
}

다음과 같은 csv:

"123","abc"
"231","dbh"
"452","xyz"

명령줄 도구 jq를 사용하고 싶은데 할당 방법을 알 수 없는 것 같습니다.나는 그럭저럭 열쇠를 손에 넣었다jq '. | keys' test.json다음에 뭘 해야 할지 모르겠더라고요

문제는 이러한 k:v 개체를 csv로 직접 변환할 수 없다는 것입니다.@csv어레이여야 하므로 먼저 어레이로 변환해야 합니다.키 이름을 붙이면 간단하지만 역동적이기 때문에 그리 쉽지는 않습니다.

다음 필터를 사용해 보십시오.

to_entries[] | [.key, .value]
  • to_entries는 객체를 키/값 객체의 배열로 변환합니다. []어레이의 각 항목으로 어레이를 분할합니다.
  • 각 항목에 대해 키와 값을 포함하는 배열에 숨겨집니다.

이것에 의해, 다음의 출력이 생성됩니다.

[
  "123",
  "abc"
],
[
  "231",
  "dbh"
],
[
  "452",
  "xyz"
]

그 후 를 사용할 수 있습니다.@csv행을 CSV 행으로 변환하려면 filter를 사용합니다.

$ echo '{"123":"abc","231":"dbh","452":"xyz"}' | jq -r 'to_entries[] | [.key, .value] | @csv'
"123","abc"
"231","dbh"
"452","xyz"

Jeff의 답변은 좋은 출발점이며, 예상에 가까운 것입니다.

cat input.json | jq 'to_entries | map([.key, .value]|join(","))'

[
 "123,abc",
 "231,dbh",
 "452,xyz"
]

그러나 newline을 사용하여 가입하는 방법을 찾지 못했습니다.

cat input.json | jq 'to_entries | map([.key, .value]|join(","))|join("\n")'

"123,abc\n231,dbh\n452,xyz"

오늘 아침에 사용한 예를 다음에 나타냅니다(PagerDuty 경보 처리).

cat /tmp/summary.json | jq -r '
  .incidents
  | map({desc: .trigger_summary_data.description, id:.id})
  | group_by(.desc)
  | map(length as $len
  | {desc:.[0].desc, length: $len}) 
  | sort_by(.length) 
  | map([.desc, .length] | @csv)
  | join("\n") '

그러면 다음과 같은 CVS 구분 문서가 덤프됩니다. "[Triggered] Something annoyingly frequent",31 "[Triggered] Even more frequent alert!",35 "[No data] Stats Server is probably acting up",55

사용해보십시오. 원하는 출력을 제공합니다.

echo '{"123":"abc","231":"dbh","452":"xyz"}' | jq -r 'to_entries | .[] | "\"" + .key + "\",\"" + (.value | tostring)+ "\""'
onecol2txt () {
 awk 'BEGIN { RS="_end_"; FS="\n"}
   { for (i=2; i <= NF; i++){
       printf "%s ",$i 
       }
     printf "\n" 
   }'
}
cat jsonfile | jq -r -c '....,"_end_"' | onecol2txt

언급URL : https://stackoverflow.com/questions/20181467/how-to-map-an-object-to-arrays-so-it-can-be-converted-to-csv

반응형