- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 JSON 字符串,我从中创建一个 InputStream 对象
,如下所示,然后在尝试序列化我的 JSON 对象时创建一个 GenericRecord
对象Avro 架构。
InputStream input = new ByteArrayInputStream(jsonString.getBytes());
DataInputStream din = new DataInputStream(input);
Decoder decoder = DecoderFactory.get().jsonDecoder(schema, din);
DatumReader<GenericRecord> reader = new GenericDatumReader<GenericRecord>(schema);
// below line is throwing exception
GenericRecord datum = reader.read(null, decoder);
以下是我遇到的异常:
org.codehaus.jackson.JsonParseException: Invalid UTF-8 middle byte 0x2d at [Source: java.io.DataInputStream@562aee31; line: 1, column: 74]
这是发生此异常的实际 JSON 字符串:
{"name":"car_test","attr_value":"2006|Renault|Megane II Coupé-Cabriolet|null|null|null|null|0|Wed Feb 03 10:00:59 GMT-07:00 2016|1|77|null|null|null|null","data_id":900}
我做了一些研究,发现我需要将 ByteArrayInputStream
与 UTF-8 编码一起使用,如下所示:
InputStream input = new ByteArrayInputStream(jsonString.getBytes(StandardCharsets.UTF_8.displayName()));
但是我的问题是这个异常的原因是什么?为什么它会发生在我上面的 JSON 字符串上?我只是想理解为什么这个异常发生在我上面的 JSON 字符串上。使用 UTF-8
是解决此问题的正确方法吗?
此错误意味着什么无效的 UTF-8 中间字节 0x2d
?
最佳答案
您从 Java Unicode 字符串 jsonString
开始。
然后使用String.getBytes()
将其转换为字节流。由于您没有指定字节编码,因此使用平台默认编码,很可能是 ISO 8859-1。
现在您可以从 (Data)InputStream
解析 JSON。现在Avro似乎使用UTF-8来解码字节。当它遇到 é
(0x2d) 时,它会失败,因为它不是有效的 UTF 字节序列。
所以最终是实际编码(ISO 8859-1)和预期编码(UTF-8)不匹配。
您可以像以前一样解决这个问题,或者只是避免从字符串到字节:
Decoder decoder = DecoderFactory.get().jsonDecoder(schema, jsonString);
关于java - JsonParseException : Invalid UTF-8 middle byte 0x2d,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35185369/
我正在尝试使用XMLMapper和ReadTree()来解析一个名为“Message”的字符串变量中的XML文档。我的代码基本上执行以下操作:。有一段时间(真的很长时间),当我运行应用程序时,它没有输
我想做的就是解析非常简单的 json 行,即使它有效我也不知道为什么它会抛出错误 该行是 com.mongodb.util.JSONParseException: {publish_status:'a
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 9 年前。 Improve th
该消息是在queueChannel尝试发送到特定IP时发出的。 适配器是... @Bean public AbstractConnectionFactory plainClientFactory()
我正在尝试用 Java 处理以下格式的 JSON。 String flowJSON = "{\"FlowDTO\":[{\"policyName\":\"Firewall\",\"action
使用PHP curl方法为大容量数据建立索引时,出现了"error":"JsonParseException[Unexpected character (':' (code 58)): expecte
我正在尝试将 Json 映射到 POJO,但出现此异常: 这是我的代码: ObjectMapper mapper = new ObjectMapper(); try {
尝试反序列化此 JSON 字符串时出现以下异常: { "studentName": "John", "studentAge": "20" } 异常(exception): com.google.gso
我有一个这样的端点: @POST public Response update(MyDocument myDocument){} 如果请求无效,我的服务器会得到一些很长的日志,如下所示: javax.
我正在开发一个连接到我开发的 REST API 的 android 应用程序。我使用 Jersey 和 Hibernate 开发了 REST API。在此 API 中,我有一个名为 findPatie
我正在尝试使用 Java 驱动程序将 json 文件导入 Mongodb,但出现此异常 Exception in thread "main" com.mongodb.util.JSONParseExc
我正在尝试执行以下使用正则表达式的查询 BasicQuery b = new BasicQuery("{ description: /\bmanager\b/}"); 但它抛出 com.mongodb
我正在使用 retrofit(1.9 版)和 jackson(jackson-converter 1.9)。我们的 API 经常以原始字符串的形式发送响应。 我们的 api 客户端如下: RestAd
我正在使用android studio 3.0,无论我做什么,我都无法生成或构建APK,令人惊讶的是它在模拟器上运行,但是在真实的 Android 设备上构建失败。 这就是我尝试构建 APK 时出现错
我正在研究为什么简单的 Jackson JSON 反序列化设置在我明显损坏的 Json 上没有失败。在我的应用程序中,在映射到 Java 类型之前,我必须确认输入是有效的 json。 final St
我已经完成了这样的映射对象到字符串对象的转换 public String getJsonString(Map>> countMap) { Gson gson = new Gson();
我在Android Studio中遇到错误。 我尝试了这些东西,但对我没有用。 删除.gradle文件夹,然后重新同步项目 手动下载了gradle发行版,并且在设置中更改了gradle以从指定位置使用
我的项目在前端使用 Spring MVC,在后端使用 EJB。当我使用 jackson 在 Controller 级别波纹管代码中序列化和反序列化 json 字符串时,代码工作正常但服务层它给出错误“
我的项目在前端使用 Spring MVC,在后端使用 EJB。当我使用 jackson 在 Controller 级别波纹管代码中序列化和反序列化 json 字符串时,代码工作正常但服务层它给出错误“
我有一个 JSON 字符串,我从中创建一个 InputStream 对象,如下所示,然后在尝试序列化我的 JSON 对象时创建一个 GenericRecord 对象Avro 架构。 InputStre
我是一名优秀的程序员,十分优秀!