Linux Shell脚本:用Regex将JSON中name字段的snake case转为camel case
解决Shell中JSON字段snake case转camel case的问题
原始JSON输入:
[{"name":"THE_NAME1","value":"Value_1"}, {"name":"THE_NAME_NEW2","value":"Value_2"}]
期望输出:
[{"name":"theName1","value":"Value_1"}, {"name":"theNameNew2","value":"Value_2"}]
方法1:使用sed(基于正则表达式)
sed适合简单场景下的文本替换,通过两步正则转换实现需求:
sed -E ' # 将name字段的所有值转为小写 s/"name":"([^"]+)"/"name":"\L\1"/g; # 将下划线后的小写字母转为大写,并删除下划线 s/_([a-z])/\U\1/g ' input.json
注意:sed是纯文本处理工具,如果JSON格式存在空格、换行或者name值包含特殊字符(如引号),可能出现匹配错误。
方法2:使用jq(更可靠的JSON处理工具)
jq是专门的JSON处理工具,能避免纯文本正则处理JSON的兼容性问题:
jq ' .[] |= ( .name = (.name | ascii_downcase | gsub("_([a-z])"; "\u\1")) ) ' input.json
解释:
.[]遍历数组中的每个对象.name | ascii_downcase将name字段值转为全小写gsub("_([a-z])"; "\u\1")匹配下划线+小写字母,替换为对应的大写字母(自动删除下划线)- 整个操作仅修改
name字段,value字段完全保持原样
内容的提问来源于stack exchange,提问作者Giridhar Sharma
相关产品推荐
相关产品推荐

