如何将JSON根层级键值统一转换为字符串(求Bash兼容方案)
JSON根层级值转字符串适配方案
需求规则
- 待处理内容为准备导入数据库的JSON转储文件,表结构等前置准备已完成
- 转换要求:仅将JSON根层级所有键对应的值统一转换为字符串类型,根层级值内部的嵌套数组、对象、基础类型子元素完全保留原有结构,不做任何修改
- 优先提供Bash环境可直接运行的兼容实现
转换示例
原始输入JSON
{ "k1": 10, "k2": "KEY2", "k3": [], "k4": -55.6, "k6": { "k7": 1, "k8": [{ "k9": "true", "k10": "false" }] }, "k11": "THIS IS VERY LONG MESSAGE OF CHARACTERS UPTO 1024 BYTES" }
期望输出JSON
{ "k1": "10", "k2": "KEY2", "k3": "[]", "k4": "-55.6", "k6": "{ \"k7\": 1, \"k8\": [{ \"k9\": \"true\", \"k10\": \"false\" }] }", "k11": "THIS IS VERY LONG MESSAGE OF CHARACTERS UPTO 1024 BYTES" }
Bash环境实现
使用通用JSON处理工具jq实现,工具轻量、无额外依赖,转换逻辑稳定不会破坏嵌套结构,各大操作系统包管理器均提供直接安装源。
依赖安装
- Debian/Ubuntu系:
sudo apt install jq -y - RHEL/CentOS/Fedora系:
sudo dnf install jq -y - macOS(Homebrew环境):
brew install jq
转换命令
单文件转换
处理单个JSON文件,结果输出到新文件,不修改原文件:
jq 'with_entries(.value |= tojson)' 原始文件.json > 转换后文件.json
批量目录转换
批量处理当前目录下所有.json后缀的文件,直接覆盖原文件(执行前建议先备份原文件):
for json_file in *.json; do tmp_file=$(mktemp) jq 'with_entries(.value |= tojson)' "$json_file" > "$tmp_file" && mv "$tmp_file" "$json_file" done
逻辑说明
with_entries负责遍历JSON根层级的所有键值对,不会进入嵌套结构内部tojson会将当前处理的根层级值序列化为标准JSON格式字符串,自动处理特殊字符转义,完整保留嵌套内容的原始结构- 该逻辑可正确处理整数、浮点数、布尔值、字符串、空数组、空对象、多层嵌套结构等所有JSON合法值类型,不会出现转义错误、结构篡改问题
内容的提问来源于stack exchange,提问作者M Ahmad Mujtaba
相关产品推荐
相关产品推荐

