JsonParseException: อักขระที่ไม่ได้ใส่เครื่องหมายที่ผิดกฎหมาย ((CTRL-CHAR รหัส 10)


98

ฉันกำลังพยายามใช้org.apache.httpcomponentsRest API ซึ่งจะโพสต์ข้อมูลรูปแบบ JSON ไปยัง API

ฉันได้รับข้อยกเว้นนี้:

เกิดจาก: com.fasterxml.jackson.core.JsonParseException: อักขระที่ไม่ได้ใส่เครื่องหมายที่ไม่ถูกต้อง ((CTRL-CHAR, รหัส 10)): ต้องมีการหลีกเลี่ยงโดยใช้แบ็กสแลชเพื่อรวมอยู่ในสตริง

สาเหตุเป็นเพราะctrl-charรวมอยู่ในสตริง JSON

มีวิธีใดบ้างที่จะแทนที่วิธีนี้หรือวิธีอื่น ๆ


1
คุณสร้าง JSON ด้วยตัวเองหรือไม่? โดยทั่วไปดูเหมือนว่าคุณมีข้อมูลที่เสียหาย ... ดังนั้นควรแก้ไขหากทำได้หรือบ่นกับใครก็ตามที่สร้างมันขึ้นมา
Jon Skeet

1
ตามที่กล่าวไว้ในคำตอบ StackOverflowนี้ JSON ของคุณตรวจสอบความถูกต้องผ่านjsonlint.comหรือไม่
Eric McCormick

Intellij idea จะตรวจสอบความถูกต้องทันทีที่คุณเปิดไฟล์. json ลองมัน!
Gaurav

คำตอบ:


88

สิ่งนี้อาจเกิดขึ้นได้หากคุณมีขึ้นบรรทัดใหม่ (หรืออักขระควบคุมอื่น ๆ ) ในลิเทอรัลสตริง JSON

{"foo": "bar
baz"}

หากคุณเป็นคนสร้างข้อมูลให้แทนที่บรรทัดใหม่จริงด้วยบรรทัดที่ใช้ Escape "\\n"เมื่อสร้างตัวอักษรสตริงของคุณ

{"foo": "bar\nbaz"}

58

การใช้

mapper.configure(
    JsonReadFeature.ALLOW_UNESCAPED_CONTROL_CHARS.mappedFeature(), 
    true
);

ดูjavadoc :

/**
 * Feature that determines whether parser will allow
 * JSON Strings to contain unescaped control characters
 * (ASCII characters with value less than 32, including
 * tab and line feed characters) or not.
 * If feature is set false, an exception is thrown if such a
 * character is encountered.
 *<p>
 * Since JSON specification requires quoting for all control characters,
 * this is a non-standard feature, and as such disabled by default.
 */

ตัวเลือกเก่าJsonParser.Feature.ALLOW_UNQUOTED_CONTROL_CHARSเลิกใช้งานตั้งแต่ 2.10

โปรดดูกระทู้ githubด้วย


จะใช้สิ่งนี้ใน xml ได้อย่างไร? ฉันมี<mvc:annotation-driven> <mvc:message-converters> <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"> <property name="objectMapper"> <bean class="com.fasterxml.jackson.databind.ObjectMapper"> <property name="serializationInclusion" value="NON_NULL"/> </bean> </property> <property name="supportedMediaTypes" value="application/json"/> </bean> </mvc:message-converters> </mvc:annotation-driven> . ฉันใช้ Jackson 2.7 และ Spring4.3.2
SudeepShakya

ทำไมคุณไม่ลองสิ่งนี้: stackoverflow.com/questions/5349362/…หรือลบล้าง bean นั้น: MappingJackso‌ n2HttpMessageConvert‌ er
hoang

@hoang ที่จะลบสิ่งนี้ใน java เนื่องจากฉันพยายามจับข้อมูลที่ผิดกฎหมายนี้ฉันได้ถามคำถามซึ่งอยู่ที่นี่stackoverflow.com/questions/49676720/…คุณช่วยฉันหน่อยได้ไหม
Vipul Singh

ขอบคุณที่มีประโยชน์มากการนำเข้าที่ฉันใช้คือ: com.fasterxml.jackson.core.JsonParser.Feature;
JesúsSánchez

1

บนแพลตฟอร์ม Salesforce ข้อผิดพลาดนี้เกิดจากการแก้ปัญหาคือจะหลบหนีเหล่านี้เป็น///


2
สำหรับฉันบนแพลตฟอร์ม Salesforce มันเป็น "\" ถึง "\\" ที่จำเป็นจริงๆ อย่างน้อยในกรณีของฉันมันเกิดขึ้นเนื่องจากอักขระบรรทัดใหม่ใน JSON ของฉัน จะต้องมีการเปลี่ยนไป\n \\nเนื่องจาก JSON ต้องใช้อักขระควบคุมเพื่อหลีกเลี่ยง ดูความคิดเห็นที่ยอดเยี่ยมที่นี่
malte
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.