【问题标题】:Split Function in hive on JSONSJSONS上hive中的拆分函数
【发布时间】:2017-01-15 18:08:36
【问题描述】:

我在 hive 中处理 JSON 数组。我知道它也可以用 JSON serde 处理,但我想用 get_json_object 或 json_tuple 和正则表达式来处理。所以我关注链接http://mechanics.flite.com/blog/2014/04/16/using-explode-and-lateral-view-in-hive/

它给出了这样的 Json 文件 {"key1":"0","key2":"11.800","info":"[{\"id\":\"1234\",\"v\":\"3\"},{\"id\":\"5678\",\"v\":\"3\"}]","key3":"3"} 为什么它需要在 id 和其他所有值前面有斜线??观察如下所示

JSON With REGEX

当我们在从上述结果中得到的正则表达式上添加拆分时,我们得到以下内容 ["{\"id\":\"1234\",\"v\":\"3\"}","{\"id\":\"5678\",\"v\":\"3\"}"]

如果我删除源 Json 文件中的斜杠,ebrything 将变为 null。摆脱这种情况的可能方法是什么。

【问题讨论】:

  • 它正在转义键“info”的 value 内的双引号。为什么不单引号,我不知道。你想从那个字符串中得到什么?
  • 读取 hive 中的数据有一些方法。我只想要字符串形式的爆炸键值对,因为这些只对我有用。

标签: json regex hive bigdata


【解决方案1】:

您看到的对象是有效的 JSON,在这种情况下,键 info 的值是一个字符串(看起来更像 JSON,令人困惑)不是对象,数组,或数字,但一个字符串。由于这个字符串中有一些双引号,所以它们被转义了。

显示这个:

JSON.parse(JSON.stringify({"key1":"0","key2":"11.800","info":"[{\"id\":\"1234\",\"v\":\"3\"},{\"id\":\"5678\",\"v\":\"3\"}]","key3":"3"}));

结果:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-07
    • 1970-01-01
    • 1970-01-01
    • 2018-02-15
    • 2022-11-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多