【问题标题】:JSON decode issueJSON解码问题
【发布时间】:2011-07-14 17:24:08
【问题描述】:

我正在尝试解码 Java 程序 (jackson) 的 JSON 输出并遇到一些问题。 问题原因如下sn-p:

{
    "description": "... lives\uMOVE™ OFFERS ",
}

导致ValueError: Invalid \uXXXX escape

关于如何解决这个问题的任何想法?

编辑:输出来自 Avro 文件,Avro 包使用 jackson 将记录作为 JSON 发出。
EDIT2:在源文件中查看后,可能是手动构造 JSON 的情况(对不起,杰克逊)。

【问题讨论】:

  • 你是如何得到输出的?您是否尝试将其编码为 utf-8 ?
  • 我正在读取 Python 的输出(将 java 作为子进程运行并读取它的标准输出)。我尝试使用 utf-8 OutputStreamWriter,但它并没有改变任何东西。

标签: java python json jackson avro


【解决方案1】:

原始字符串应该是什么样子的? \uXXXX 是一个 unicode 转义序列,因此它将 \uMOVE 解释为单个字符,但它不是有效的 unicode 值。 JSON 始终被假定为 unicode,因此您可能需要修复原始应用程序中的字符串

【讨论】:

  • 原始应用是 Avro 包(记录的 toString 方法)。所以我无法在这个级别修复它(除了为记录编写我自己的 JSON 编码器)。
  • 描述文字是来自您还是来自包裹?如果是前者,它应该是什么样子?
  • 它来自 Avro 文件。
  • 您是否创建了 Avro 文件?换句话说,除了编码之外,字符串应该是什么样的?
  • 我无法控制 avro 的装箱方式。
【解决方案2】:

尝试像这样引用\u

{
    "description": "... lives\\uMOVE™ OFFERS ", 
}

【讨论】:

  • 可能是双重转义问题。我能够让它在 python 中解析:'{ "description":"... living\\\\uMOVE™ OFFERS "}'
【解决方案3】:

基本上输入不是有效的 json。

http://www.json.org/ 的规范定义了字符串的编码方式。您必须修复来自其他应用程序的 JSON 输出。

【讨论】:

    【解决方案4】:

    这是 Avro 版本 AVRO-851。

    【讨论】:

      【解决方案5】:

      Jackson 目前没有允许接受此类输入的配置功能。 (它是由 Jackson 生成的吗?)

      您可以修改流解析器来处理它。按照堆栈跟踪找到需要更改的方法。

      您可以在 http://jira.codehaus.org/browse/JACKSON 提交更改请求,让 Jackson 得到增强以提供这样的功能,但我不确定该请求有多受欢迎,以及它是否会被实施。

      【讨论】:

      • 它是用 jacson 生成的(它是一个 avro 文件的输出)
      • 杰克逊不应该产生这样的输出;但如果它以某种方式发生,那将是杰克逊的错误。
      猜你喜欢
      • 1970-01-01
      • 2012-11-10
      • 1970-01-01
      • 1970-01-01
      • 2023-03-05
      • 1970-01-01
      • 2014-05-30
      • 1970-01-01
      • 2012-10-20
      相关资源
      最近更新 更多