开发者社区 > 大数据与机器学习 > 大数据开发治理DataWorks > 正文

数仓中String类型数据里面存的是json数组,然后输出至ES中对应keyword类型,结果数据变

数仓中String类型数据里面存的是json数组,然后输出至ES中对应keyword类型,结果数据变成 """[]""" 多了两个双引号,怎么办?

展开
收起
游客3oewgrzrf6o5c 2022-07-14 16:59:15 696 0
1 条回答
写回答
取消 提交回答
  • 全栈JAVA领域创作者

    这个问题可能是由于JSON字符串中的双引号被转义导致的。在JSON中,双引号需要使用反斜杠来进行转义,例如:"Hello World"。如果在字符串中有多个双引号,需要使用多个反斜杠进行转义,例如:"He said, \"Hello World!\""。在ES中,keyword类型对应的是原始字符串,不会对字符串进行转义处理。因此,当JSON数组中包含多个双引号时,输出至ES中的字符串就会变成多了两个双引号的形式。
    解决方法有两种:

    在数仓中将JSON数组中的双引号转义,例如:"["He said, \"Hello World!\"]"。这样输出至ES中的字符串就不会有问题了。
    在ES中将keyword类型转换为text类型,text类型会对字符串进行分词和转义处理,可以将多余的双引号去掉。具体实现可以参考ES官方文档中关于text类型的介绍:https://www.elastic.co/guide/en/elasticsearch/reference/current/search-fields.html#text-field。
    需要注意的是,如果JSON数组中包含的是多层嵌套的JSON对象,转义时需要考虑到每个层级的双引号。例如:"["He said, \"Hello World!\"]"中的双引号需要进行两次转义,如果只转义了一次,就会变成"["He said, \"Hello World!\"]"。

    2023-08-04 12:00:09
    赞同 展开评论 打赏

DataWorks基于MaxCompute/Hologres/EMR/CDP等大数据引擎,为数据仓库/数据湖/湖仓一体等解决方案提供统一的全链路大数据开发治理平台。

相关电子书

更多
新氧云原生全栈数仓最佳实践 立即下载
离线实时一体化数仓与湖仓一体—云原生大数据平台的持续演进 立即下载
企业大数据平台下数仓架构 立即下载