คุณสามารถหลีกเลี่ยง Gson แปลง“ <” และ“>” เป็นลำดับการหลีกเลี่ยง Unicode ได้หรือไม่


128

ฉันสังเกตเห็นว่าGsonแปลงสตริง "<" เป็นลำดับการหลีกเลี่ยง Unicode ในเอาต์พุต JSON คุณสามารถหลีกเลี่ยงสิ่งนี้ได้หรือไม่หรืออักขระเช่น "<" และ ">" จะต้องมีค่า Escape ใน JSON

ลองพิจารณาตัวอย่างที่พิมพ์{"s":"\u003c"}; {"s":"<"}ฉันต้องการเพียงแค่

public static void main(String[] args) {
    Gson gson = new GsonBuilder().create();
    System.out.println(gson.toJson(new Foo()));  
}

static class Foo {
    String s = "<";
}

บริบท: ส่วนของ JSON ที่ฉันสร้างไม่มีส่วนเกี่ยวข้องกับหน้า HTML หรือแม้แต่ JavaScript ใช้เพื่อส่งข้อมูลที่มีโครงสร้างบางอย่างไปยังซอฟต์แวร์อื่น (ฝังอยู่ในอุปกรณ์เขียนด้วยภาษา C)


2
GSON ผิดนัดที่จะทำเช่นนั้นหรือไม่? โว้ว. นั่นเป็นการตั้งค่าเริ่มต้นที่ค่อนข้างแปลกแม้ว่าจะต้องทำตามกฎหมายอย่างสมบูรณ์แบบจากมุมมองข้อมูลจำเพาะของ JSON
StaxMan

3
ใช่มันก็น่าแปลกใจสำหรับฉันเช่นกัน โชคดีที่วิธีการรักษานั้นง่ายมากเมื่อคุณรู้ว่าต้องดูที่ไหน :) มิฉะนั้นหลังจากสัมผัสกับมันมาหนึ่งวันฉันพบว่า Gson เป็นห้องสมุดที่สะอาดและสวยงามจริงๆพร้อมคู่มือผู้ใช้ที่ยอดเยี่ยมด้วย!
Jonik

6
นอกจากนี้ยังเกิดขึ้นกับอักขระ "=" ซึ่งเปลี่ยนเป็น "\ u003d"
Russell Silva

คำตอบ:


254

คุณจำเป็นต้องปิดการใช้งาน HTML หนี

Gson gson = new GsonBuilder().disableHtmlEscaping().create();

11
ฉันสงสัยว่าทำไมถึงเปิดโดยค่าเริ่มต้น JSON ไม่มีส่วนเกี่ยวข้องกับ HTML ข้อมูลจำเพาะของรัฐเท่านั้น"และ `\` จะต้องมีการหลบหนี
Mark Jeronimus

พวกนั่นไม่ได้ผลสำหรับฉัน ฉันใช้ '' com.squareup.retrofit2: retrofit: 2.3.0 '' && '' com.squareup.retrofit2: converter-gson: 2.3.0 '' โปรดช่วยฉันด้วย
Mr Code
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.