【问题标题】:org.codehaus.jackson.JsonParseException: Unexpected character ('�' (code 65533 / 0xfffd))org.codehaus.jackson.JsonParseException:意外字符('�'(代码 65533 / 0xfffd))
【发布时间】:2015-06-05 07:21:42
【问题描述】:

我在数据库中有一个 Json 字符串,但是在转换为 Java 对象时,它给出了以下错误:

原因:org.codehaus.jackson.JsonParseException:意外字符('�'(代码 65533 / 0xfffd)):预期有效值(数字、字符串、数组、对象、'true'、'false' 或'空')

Json 是:{"crt":"wrd","name":"7|6A TTTM"}

在 java 代码中我已经对其进行了配置并将其设为私有(不是静态最终)

objectMapper= new ObjectMapper();
objectMapper.configure(DeserializationConfig.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true);

注意:有时会在 Object 中转换 Json 字符串,但有时会出现上述错误。为什么会出现这个意想不到的结果?

【问题讨论】:

  • 它可能会遇到一些无法正确解码的字节序列,从而导致替换字符。检查编码设置。
  • 我没有给出任何编码设置。
  • 如何设置编码?
  • @Nikhilsoni 您可以在创建输入流时显示代码吗?还有,你创建 json 时的编码是什么?
  • @Nikhilsoni 嗯,好的,但是你最初是如何创建 obj 的?我只是想确保当您生成 obj 时,您将编码设置为类似 UTF-8 的编码,或者至少与您在运行此代码的平台中使用的默认编码相同。

标签: java json jackson mapper


【解决方案1】:

简答解决方案:使用以下方法删除第一次出现的额外添加的 BOM 文本,应该可以解决此问题:

public String cleanUpJsonBOM(String json) {
      return json.trim().replaceFirst("\ufeff", "");
  }

我在 blog post 中记录了类似的问题。 希望这有帮助!

【讨论】:

  • 请从链接中发布相关内容
  • 完成!谢谢你的建议!
【解决方案2】:

这对我有用。

String formattedString = yourString.trim().replaceAll("\uFFFD", "");

【讨论】:

    【解决方案3】:

    某些东西正在产生无效的 UTF-8 序列(或者,UTF-8 与 ISO-8859-1 等单字节编码不匹配),Jackson 检测到了这个编码问题。与ACCEPT_SINGLE_VALUE_AS_ARRAY设置无关,因为异常来自低级JsonParser

    所以你需要弄清楚为什么要解析的 JSON 内容是损坏的。

    【讨论】:

    • 感谢您的回复。罪魁祸首是部署了我的应用程序的 WildFly 服务器集群实例。它不稳定。重启后解析正常。
    猜你喜欢
    • 2015-08-28
    • 1970-01-01
    • 2015-07-26
    • 2021-10-03
    • 1970-01-01
    • 2018-07-22
    • 2021-06-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多