SELECT ARRAY类型的值时,未转义特殊字符,导致取到的值是无效的JSON字符串

Viewed 74
SELECT ARRAY('a\nb') as c1, CAST(ARRAY('a\nb') AS JSON) as c2

取到的值分别为

c1: '["a\nb"]'
c2: '["a\\nb"]'

c1由于未转义\n,导致该字符串为无效JSON,无法进行后续处理。

3 Answers

没看明白,ARRAY('a\nb') 不行吗
image.png

我也遇到相同的问题, 使用stream load 导入 array 数据,结果有误 \n 被转成了n。

表结构:

CREATE TABLE `tmp_test` (
  `id` bigint NOT NULL AUTO_INCREMENT(1),
  `value` varchar(65533) NULL,
  `arr` array<varchar(65533)> NULL,
  `json` json NULL
) ENGINE=OLAP
UNIQUE KEY(`id`)
DISTRIBUTED BY HASH(`id`) BUCKETS 10

JSON 文件

{"id": 111, "value": "Hello, \n \"Doris\"", "arr": ["Hello, \n \"Doris\""],  "tmp_arr": ["Hello, \n \"Doris\""], "json": ["a\nb", "a\"b"]}

导入方式

curl --location-trusted -u <user: password> \
    -H "Expect:100-continue" \
    -H "format:json" \
    -T stream_load_test.json \
    -H "read_json_by_line:true" \
    -H "columns: id, value, arr, json" \
    -H "strip_outer_array:false" \
    -XPUT <ip>/tmp_test/_stream_load

查询结果

e3f6ce80a9d93941a2c1f79b8dd2967.png

可能这并不是一个问题,spark 也是类似的结果:
image.png

json 会将字符串中的换行符转移表达为 '\n',但是 array 函数并没有同样的行为。