如何将JSON字符串转为数组并去除转义字符?解决ETL格式问题
JSON行式数据封装为指定结构JSON的转义问题解决
问题说明
现有一个包含2万+行的JSON行式数据文件,需要将其封装为指定结构的JSON,要求其中data字段为JSON对象数组。目前通过CSV数据集以^为分隔符将文件读取为单列,再经派生列处理后,生成的JSON中data字段变成了带有多层转义的字符串,而非预期的对象数组,需解决将JSON字符串转换为数组并去除多余转义字符的问题。
输入输出示例
输入数据(JSON行格式)
{"A":12345,"B":"2023-12-31 00:00:00","C":5510,...} {"A":54321,"B":"2024-01-15 08:00:00","C":7890,...}
期望输出
{ "dataRepositoryId": "fixedvalue", "importName": "uuid", "data": [ {"A":12345,...}, {"A":54321,...} ] }
当前异常输出
{"dataRepositoryId": "fixed vale","importName": "uuid","data":"[\"{\\\"A\\\":12345,...}\\\n", ...]"}
解决方案
方法1:直接读取JSON行文件(推荐)
放弃CSV读取的方式,改用支持**JSON行(NDJSON)**的工具/组件处理:
- 逐行读取文件内容,将每一行的字符串直接解析为JSON对象
- 把所有解析后的对象汇总成一个数组
- 最后将该数组赋值给目标JSON的
data字段,同时补充dataRepositoryId和importName固定字段即可
方法2:修复现有CSV读取流程
如果必须保留CSV读取的步骤,需在派生列环节做以下处理:
- 清理转义字符:对读取到的单列字符串,批量替换多余的转义符号,比如把
\\\"替换为\",移除不必要的换行转义\\n - 解析为JSON对象:使用工具自带的JSON解析功能(如
JSON.parse()),将每一行清理后的字符串转换成JSON对象 - 组装为数组:将所有解析完成的JSON对象收集为数组,直接赋值给
data字段,避免直接拼接字符串导致的二次转义
内容的提问来源于stack exchange,提问作者moderator
相关产品推荐
相关产品推荐

