JsonParseException: अवैध निर्विवाद चरित्र ((CTRL-CHAR, कोड 10)


93

मैं org.apache.httpcomponentsएक रेस्ट एपीआई का उपभोग करने की कोशिश कर रहा हूं , जो JSON प्रारूप डेटा को एपीआई में पोस्ट करेगा।

मुझे यह अपवाद मिलता है:

इसके कारण: com.fasterxml.jackson.core.JsonParseException: अवैध अयोग्य चरित्र ((CTRL-CHAR, कोड 10)): स्ट्रिंग में शामिल करने के लिए बैकस्लैश का उपयोग करके बचना होगा।

इसका कारण ctrl-charJSON स्ट्रिंग में शामिल है।

क्या इसे या किसी अन्य समाधान को बदलने का कोई तरीका है?


1
क्या आप खुद JSON बना रहे हैं? मूल रूप से, ऐसा लगता है कि आपके पास टूटा हुआ डेटा है ... इसलिए या तो इसे ठीक करें यदि आप कर सकते हैं, या जो कोई भी इसे बनाने की शिकायत कर रहा है।
जॉन स्कीट

1
जैसा कि इस StackOverflow उत्तर में चर्चा की गई है , क्या आपका JSON jsonlint.com के माध्यम से सही ढंग से मान्य है ?
एरिक मैककॉर्मिक

जैसे ही आप .json फ़ाइल खोलते हैं, Intellij विचार इसे मान्य करता है। कोशिश करो!
गौरव

जवाबों:


83

यह तब हो सकता है जब आपके पास JSON स्ट्रिंग शाब्दिक में एक नई पंक्ति (या अन्य नियंत्रण वर्ण) हो।

{"foo": "bar
baz"}

यदि आप डेटा का उत्पादन कर रहे हैं, "\\n"तो अपनी स्ट्रिंग शाब्दिक का निर्माण करते समय बची हुई नई खांचों को बदल दें ।

{"foo": "bar\nbaz"}

55

का उपयोग करते हुए

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

जावदोक देखें :

/**
 * 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_CHARS2.10 से पुराने विकल्प को हटा दिया गया था।

कृपया गितुब धागा भी देखें ।


इसे 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> । मैं जैक्सन 2.7 का उपयोग कर रहा हूं। और स्प्रिंग 4.3.2
सुदीपशाक्य

आप यह कोशिश क्यों नहीं करते हैं: stackoverflow.com/questions/5349362/… या उस बीन को ओवरराइड करना: MappingJackso n2HttpMessageConverth er
hoang

@ जोंग इस जावा में जहां देरी है, क्योंकि मैं इस अवैध डेटा को पकड़ने की कोशिश कर रहा हूं, मैंने यह सवाल पूछा है कि यहां क्या है stackoverflow.com/questions/49676720/… , क्या आप कृपया मेरी मदद कर सकते हैं।
विपुल सिंह

धन्यवाद वास्तव में उपयोगी है, मैंने जो आयात किया वह था: com.fasterxml.jackson.core.JsonParser.Feature;
जेसुअ सॅन्चेज़

1

Salesforce प्लेटफ़ॉर्म पर इस त्रुटि के कारण होता है /, समाधान के रूप में इन से बचने के लिए है //


2
मेरे लिए - Salesforce प्लेटफ़ॉर्म पर - यह "\" से "\\" था जो वास्तव में आवश्यक था। कम से कम मेरे मामले में यह मेरे JSON में नई पंक्ति वर्णों के कारण हुआ। \nको बदलना पड़ा \\n। यह इस तथ्य के कारण है कि JSON को नियंत्रण वर्ण से बचने की आवश्यकता है। इस उत्कृष्ट टिप्पणी को यहां देखें ।
malte
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.