当前位置: 首页 > 知识库问答 >
问题:

如何使Apache Drill解析带有无效UTF8字符的JSON文件

孟财
2023-03-14

我试图使用Apache Drill对JSON文件运行一个SELECT查询。我得到不同文件的各种错误。所有错误都是JSON解析错误:

>

  • 错误:DATA_READ错误:分析JSON时出错-无效的UTF-8中间字节0x3F

    错误:DATA_READ错误:解析JSON时出错-非法的无引号字符((CTRL-CHAR,代码13)):必须使用反斜杠转义才能包含在字符串值中

    对于第一个错误,它是由于某些字符的存在,如“‘?’?‘?’?‘?’?‘?’?‘?’?‘?’?‘?’?‘?’?‘?’?‘?’?‘?’?‘?’?‘?’?‘?’?

    • 对包含无效UTF-8字符的字段使用convert_toconvert_from(无效。不要认为这些函数是用于此目的。)
    • -dsaffron.default.charset=utf-16le添加到conf/drill-env.sh中的DRILL_JAVA_OPTS(不起作用,因为如果查询而不是数据包含无效的UTF-8字符,则使用此选项)
    • 使用notepad++将文件编码更改为UTF-8(不起作用。希望这能起作用)
    • 尝试使用Notepad++将文件编码更改为UTF-8(没有BOM)(Notepad++无法将其转换。保存后,再次打开时为ANSI)
  • 共有1个答案

    宋明亮
    2023-03-14

    将编码更改为“UTF-8 with BOM”,使用以下任一项:

    • 记事本++
    • iconv(shell实用程序)

    并且,您将能够使用Apache Drill查询它。

    使用iConv转换的文件和使用notepad++转换的文件(基本上,任何转换为“UTF-8 with BOM”的文件)都可以使用Apache Drill进行解析。

    要转换:

    • 使用记事本++:从菜单栏中选择“编码”,将其更改为“UTF8 with BOM”并保存文件。如果此编码未显示在编码列表中,则可能有某个插件(或其他方式)可在Notepad++中使用。
    • 使用iConv:下载实用程序并使用以下命令运行它:iConv-f old-encoding-t new-encoding(本例中为UTF-8)file.txt>newfile.txt

    注意:对于大文件,您可能需要在转换之前将其拆分,因为在我的例子中,Notepad++无法打开2GB文件,iConv也无法转换。

     类似资料:
    • 问题内容: 我正在提取无效的JSON JSON提要。它完全缺少引号。我尝试了一些操作,例如和,以使该字符串看起来更像有效的JSON,但是在其中包含关联JSON字符串的情况下,通常会弄糟。 这是一个例子: 是否有任何php的JSON解析器可以处理这样的无效JSON? 编辑:我试图在此字符串上使用。它什么也不返回。 问题答案: 所有引号应为双引号而不是单引号。 所有键都应加引号。 整个元素应该是一个对

    • 问题内容: 我有一个包含1-n纬度/经度记录的JSON字符串。看起来像这样: 什么是解析此值以获取经纬度值循环的好方法?转义的双引号是否会影响解析? 谢谢亚历克斯 问题答案: 打印…

    • 我需要使用jsonpath解析例子1中的json,类似于下面的例子2。但找不到路径,因为json的类型是字符串。请建议我一些可能的方法来解析json字符串,以动态地修改colourCode的值。 例1: 例2: Jsonpath: 这将返回"iPhone"

    • 问题内容: 我想知道是否有一种方法可以解码类似JSON的字符串。 我得到了字符串: 这不是有效的JSON字符串,因此我无法直接使用python API对其进行解码。Python将仅接受字符串化的JSON字符串,例如: 其中属性被引用为字符串。 问题答案: 使用demjson模块,该模块具有在非严格模式下解码的能力。

    • 问题内容: 有没有办法避免返回包含无效(非UTF-8)字符的字符串? 在复杂的系统中调试可能会很麻烦。实际看到无效字符,或者至少将其省略会更合适。就目前而言,它将无声地丢弃整个字符串。 示例(在UTF-8中): 结果是 所需结果: 注意 :我 不 希望使破碎的字符串在json_encode()中起作用。我正在寻找简化诊断编码错误的方法。一个字符串是不是该有所帮助。 问题答案: php确实会尝试产生

    • 问题内容: 我正在尝试解析以下JSONString 这是我的代码: 有人可以帮忙,我的代码不起作用吗?我想解析标题,公司名称,类别等… 问题答案: 您需要从您的jsonstring 创建。 你有里面然后..