数仓中String类型数据里面存的是json数组,然后输出至ES中对应keyword类型,结果数据变成 """[]""" 多了两个双引号,怎么办?
这个问题可能是由于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!\"]"。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
DataWorks基于MaxCompute/Hologres/EMR/CDP等大数据引擎,为数据仓库/数据湖/湖仓一体等解决方案提供统一的全链路大数据开发治理平台。