今天浪费了一下午时间在调试spring4.x 里的jackson,发现jackson解析的时候需要是标准json。
标准{"dd":21}
{'dd':21}非标准,添加 mapper.configure(JsonParser.Feature.ALLOW_SINGLE_QUOTES, true)也可以正常解析。
{dd:21}不是json,解析不了
关键spring4.x里是不能对{'dd':21}解析的,除非自己申明ALLOW_SINGLE_QUOTES。
public static void main(String[] ss)
{
String str = "{'dd':21}";
ObjectMapper mapper = new ObjectMapper();
// mapper.configure(JsonParser.Feature.ALLOW_SINGLE_QUOTES, true);
InputStream inputStream = new ByteArrayInputStream(str.getBytes());
JavaType jt = mapper.getTypeFactory().constructType(TData.class, TData.class.getClass());
try
{
TData data =mapper.readValue(inputStream,jt );
System.out.print(data.getDd());
} catch (IOException e)
{
e.printStackTrace();
}
}
会报错
com.fasterxml.jackson.core.JsonParseException: Unexpected character (''' (code 39)): was expecting double-quote to start field name
at [Source: java.io.ByteArrayInputStream@185fac52; line: 1, column: 3]
at com.fasterxml.jackson.core.JsonParser._constructError(JsonParser.java:1524)
at com.fasterxml.jackson.core.base.ParserMinimalBase._reportError(ParserMinimalBase.java:557)
at com.fasterxml.jackson.core.base.ParserMinimalBase._reportUnexpectedChar(ParserMinimalBase.java:475)
at com.fasterxml.jackson.core.json.UTF8StreamJsonParser._handleOddName(UTF8StreamJsonParser.java:1783)
at com.fasterxml.jackson.core.json.UTF8StreamJsonParser._parseName(UTF8StreamJsonParser.java:1480)
at com.fasterxml.jackson.core.json.UTF8StreamJsonParser.nextToken(UTF8StreamJsonParser.java:700)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:118)
at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:2993)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2158)
分享到:
相关推荐
通常,这样的代码会展示如何使用Objective-C或Swift处理非标准JSON数据的完整流程,包括预处理、解析和错误处理等环节。分析和理解这段代码可以帮助开发者更好地应对类似问题。 总的来说,处理非正式的JSON数据需要...
1. 将键值对的双引号暂时替换为其他非特殊字符,例如单引号。 2. 去除字符串值中的双引号。 3. 再将临时替代的字符替换回原来的双引号。 具体代码如下: ```java String s = allData.replaceAll("\\{\"","{'") // ...
2. 可以使用单引号:在JSON5中,字符串不仅可以使用双引号("),也可以使用单引号(')进行包围,这样在处理包含大量单引号文本时,可以避免转义操作。 3. 多行字符串:JSON5允许使用反斜杠(\)后面跟着一个换行...
3. 转换过程中可能出现的错误,如非标准JSON格式、循环引用等,需通过try...catch处理。 总之,JSON到数组的转化是JavaScript开发中的常见操作,它使得我们能够方便地处理从服务器获取的结构化数据,并进行各种操作...
- 检查并避免使用单引号或其他非标准字符。 - 使用JSON验证工具检查返回的JSON数据是否符合标准。 2. **回退到旧版jQuery**: - 如果短期内无法修改服务器端返回的JSON数据格式,可以考虑暂时回退到旧版本的...
由于JSON规范要求数据用双引号包围,而JavaScript中对象的键默认需要用单引号或双引号,因此在使用`eval()`时,通常会在字符串前面和后面加上额外的括号,以确保解析为JavaScript对象而不是语句。 然而,这种方法...
4. 处理非标准JSON字符串:在实际应用中,可能会遇到一些不符合严格JSON格式的字符串(例如属性使用单引号而不是双引号)。jQuery的parseJSON方法在这种情况下会抛出语法异常。因此,当需要处理非标准JSON时,开发者...
6. **注释去除**:虽然JSON标准中不支持注释,但有些非标准的JSON文件可能包含注释,格式化工具会将这些注释去除或转换。 JSON校验则涉及到以下要点: 1. **语法检查**:校验器会检查JSON字符串是否符合JSON语法...
这是因为JSON解析器期望反斜杠总是成对出现,即后跟另一个字符进行转义,或者在字符串的末尾作为转义结束符。通过这种方式,可以确保所有的单个反斜杠都被转换为偶数个反斜杠,满足JSON的解析要求。 需要注意的是,...
它允许一定程度的非标准JSON格式,如忽略多余的逗号、缺失的引号等,这在处理来自不同源的不规范数据时非常有用。这种宽松的解析策略降低了数据转换的难度,减少了因格式问题导致的错误。 此外, toloframework-...
4. **非标准JSON特性**:`json_tricks`还支持JSON5和JSON Lines等非标准格式,它们提供了更宽松的语法,比如允许注释和单引号字符串。 5. **保留浮点数精度**:默认情况下,JSON只保留小数点后15位的精度,但`json_...
所有的JSON字符串都必须使用双引号(")括起来,而不是单引号(')。这是JSON语法的一部分,不遵守可能导致解析错误。 2.1.3 扁平化数据 VS 结构化数据 根据需求,开发者应权衡数据的扁平化和结构化。扁平化的JSON...
但请注意,`JSON.parse`不会处理非标准的JSON格式,如使用单引号 `'` 或未转义的特殊字符,所以确保输入的字符串符合JSON规范。 总的来说,当处理JSON数据时,理解其格式和JavaScript中的转换方法至关重要。使用`...
7. **解码选项**:支持`allow_singlequote`,允许使用单引号定义字符串,`relaxed`模式可以容忍非标准的JSON语法等。 在JSON-PP-master这个压缩包中,通常包含源代码、测试文件、文档和安装指南等资源。开发者可以...
- 使用双引号:JSON规范要求所有的字符串都必须用双引号括起来,而非单引号,以确保JSON的有效性和兼容性。 - 扁平化数据 VS 结构化数据:在设计JSON结构时,需要权衡扁平化数据(易于解析)与结构化数据(利于...
2. **宽松的JSON语法**:demjson能够容忍一些非标准的JSON,如允许在数字前面加零,或者在JSON字符串中使用单引号等。 3. **日期和时间处理**:demjson能够识别和处理JavaScript的Date对象,将其转换为Python的...
总的来说,JSON已经成为Web开发中传递和存储数据的标准格式,其简洁性、易读性及与JavaScript的良好兼容性使其在Ajax应用中占据了主导地位。随着技术的发展,JSON也在其他领域得到广泛应用,如API接口、配置文件等。...
因此,上述代码中的单引号`'`应当替换为双引号`"`。 2. **数字类型的处理不当**:在`'phone'`字段中,`'number': +123456`这样的写法也是错误的。即使是在JSON中表示数字,也应该直接使用数字而非字符串形式,或者...
3. **非标准转换方法**:在示例代码中,可以看到一些非标准的方法来实现转换,如`obj2str()`和使用`eval()`。`obj2str()`函数递归地遍历对象并将其转换为JSON格式的字符串。`eval()`函数在JavaScript中可以执行一个...