JsonParseException: Geçersiz tırnaksız karakter ((CTRL-CHAR, kod 10)


100

org.apache.httpcomponentsJSON format verilerini API'ye gönderecek bir Rest API'yi kullanmaya çalışıyorum .

Bu istisnayı anlıyorum:

Nedeni: com.fasterxml.jackson.core.JsonParseException: Geçersiz tırnaksız karakter ((CTRL-CHAR, kod 10)): dizeye eklenmek için ters eğik çizgi kullanılarak öncelenmelidir.

Bunun nedeni, ctrl-charJSON dizesine dahil edilmesidir.

Bunu veya başka bir çözümü değiştirmenin bir yolu var mı?


1
JSON'u kendiniz mi oluşturuyorsunuz? Temelde, bozuk verileriniz varmış gibi görünüyor ... bu yüzden ya yapabiliyorsanız düzeltin ya da üreten kişiye şikayet edin.
Jon Skeet

1
Bu StackOverflow yanıtında tartışıldığı gibi , JSON'unuz jsonlint.com aracılığıyla doğru şekilde doğrulanıyor mu?
Eric McCormick

Intellij fikri, .json dosyasını açar açmaz onu doğrular. Dene!
Gaurav

Kod 9 sorunum vardı - [TAB] karakterinden kaynaklanıyordu
yossico

Yanıtlar:


92

Bu, bir JSON dizesi değişmezinde bir satırsonu (veya başka bir kontrol karakteri) varsa gerçekleşebilir.

{"foo": "bar
baz"}

Verileri üreten kişi sizseniz, "\\n"dize değişmezlerinizi oluştururken gerçek yeni satırları çıkış karakterli olanlarla değiştirin .

{"foo": "bar\nbaz"}

59

Kullanma

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

Javadoc'a bakın :

/**
 * 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.
 */

Eski seçenek JsonParser.Feature.ALLOW_UNQUOTED_CONTROL_CHARS2.10'dan beri kullanımdan kaldırıldı.

Lütfen github dizisine de bakın .


bunu xml'de nasıl uygulayabilirim? Var <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 kullanıyorum. ve İlkbahar4.3.2
SudeepShakya

Neden şunu denemiyorsunuz: stackoverflow.com/questions/5349362/… Veya o fasulyeyi geçersiz kılmak: MappingJackso‌ n2HttpMessageConvert‌ er
hoang

@hoang, bu yasadışı veriyi yakalamaya çalışırken bunu java'da nerede delare edeceğim, burada stackoverflow.com/questions/49676720/… olan soruyu sordum, lütfen bana yardım eder misiniz?
Vipul Singh

teşekkürler gerçekten yararlı, kullandığım ithalat şuydu: com.fasterxml.jackson.core.JsonParser.Feature;
Jesús Sánchez

1

Salesforce platformunda bu hatanın nedeni /, çözüm bunlardan kaçmaktır //.


2
Benim için - Salesforce platformunda - gerçekten gerekli olan "\" ile "\\" arasındaydı. En azından benim durumumda JSON'mdeki yeni satır karakterleri nedeniyle oluştu. \nolarak değiştirilmek zorunda kaldı \\n. Bunun nedeni, JSON'un kontrol karakterlerinin öncelenmesini gerektirmesidir. Bu mükemmel yorumu burada görün .
malte
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.