ยังไงที่จะไม่ยอมให้ jq ตีความเรื่องการบรรทัดใหม่อักขระที่ส่งออกไปยังต้องแฟ้ม csv

0

คำถาม

ฉันต้องการจะแปลงต่อไปนี้ LANGUAGE เนื้อหาถูกจัดเก็บไว้ในแฟ้ม tmp.language

{
    "results": [
        [
           {
               "field": "field1",
               "value": "value1-1"
           },
           {
               "field": "field2",
               "value": "value1-2\n"
           }
        ],
        [
           {
               "field": "field1",
               "value": "value2-1"
           },
           {
               "field": "field2",
               "value": "value2-2\n"
           }
        ]
    ]
}

เข้าส่งออกแฟ้ม csv

"field1","field2"
"value1-1","value1-2\n"
"value2-1","value2-2\n"

ตอนที่ฉันใช้มัน jq คำสั่งอย่างไรก็ตาม

 cat tmp.json | jq -r '.results | (first | map(.field)), (.[] | map(.value)) | @csv'

ผมได้เรื่องผล:

"field1","field2"
"value1-1","value1-2
"
"value2-1","value2-2
"

วิธีที่ควร jq คำสั่งถูกเขียนต้องไปที่ต้องการแฟ้ม csv ผล?

export-to-csv jq json
2021-11-24 06:09:08
2

คำตอบที่ดีที่สุด

3

สำหรับ jq-ช่วยแก้ปัญหา,คุณสามารถใช้ gsub("\n"; "\\n"). ฉันจะไปกับเรื่องแบบนี้:

.results
| (.[0] | map(.field)),
  (.[]  | map( .value | gsub("\n"; "\\n")))
| @csv

ใช้ของคุณ LANGUAGE และ invoking นเรื่องนี้ด้วย-สเปนเซอร์รี้ดครับ r บรรทัดคำสั่งตัวเลือกมีค่า:

"field1","field2"
"value1-1","value1-2\n"
"value2-1","value2-2\n"
2021-11-24 06:57:07
1

ถ้า newlines เป็นสิ่งเดียวที่คุณสามารถรับมือบางทีคุณอาจสามารถต่อรองได้ข้อความคนมาแทนแกร์เรตต์ได้แล้ว

cat tmp.json | jq -r '.results | (first | map(.field)), (.[] | map(.value) | map(gsub("\\n"; "\\n"))) | @csv'
2021-11-24 06:48:27

@rchrome นี่เป็นสาเหตุ Segmentation fault (core dumped) ในของฉัน CentOS7 เครื่องจักร ไม่แน่ใจว่าทำไมเหมือนกัน
hermit.crab

หืมน่าสนใจมันทำงานอยู่ของฉัน ubuntu 16.04 เครื่องกับ jq รุ่น 1.5.1
rchome

@rchrome ที่ได้แก้ไขไปทางออกตอนนี้ทำงานอยู่ของฉัน CentOS7 เครื่องจักร ขอบคุณ
hermit.crab

ในภาษาอื่นๆ

หน้านี้อยู่ในภาษาอื่นๆ

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................