You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Perl为JSON数组的每个元素添加双引号

用Perl给JSON数组每个元素添加双引号的靠谱方案

嘿,这个需求我熟!别想着用正则表达式硬怼,很容易踩JSON格式的坑(比如不小心把字符串里的内容给替换错了),用Perl的核心JSON模块来处理才是最稳妥的方式——毕竟专业的事交给专业的工具嘛。

核心思路

先把原始JSON解析成Perl的数据结构,把数组里的所有元素强制转换成字符串类型,最后再重新编码成JSON格式,这样每个元素都会自动带上双引号,完全符合JSON规范。

代码示例(一维数组)

假设你有这样的原始JSON(元素混合了数字、布尔值、已有字符串和null):

[123, true, "hello", null, 45.67]

对应的Perl代码如下:

use strict;
use warnings;
use JSON;

# 原始JSON字符串
my $raw_json = '[123, true, "hello", null, 45.67]';

# 解析成Perl数组引用
my $data = decode_json($raw_json);

# 遍历数组,把每个元素转成字符串(强制类型转换)
$_ = defined $_ ? "$_" : "null" for @$data;

# 重新编码成符合要求的JSON
my $formatted_json = encode_json($data);

# 输出结果
print $formatted_json;

运行这段代码后,输出的JSON会是:

["123","true","hello","null","45.67"]

处理多维嵌套数组的情况

如果你的JSON是多层嵌套的数组(比如[[1,2], [true,false]]),那需要递归遍历所有元素来转换:

use strict;
use warnings;
use JSON;

sub convert_to_string {
    my ($item) = @_;
    if (ref $item eq 'ARRAY') {
        # 递归处理数组里的每个元素
        return [ map { convert_to_string($_) } @$item ];
    } else {
        # 非数组元素转成字符串
        return defined $item ? "$item" : "null";
    }
}

my $raw_json = '[[1,2], [true,false], "test"]';
my $data = decode_json($raw_json);
my $processed_data = convert_to_string($data);
my $formatted_json = encode_json($processed_data);

print $formatted_json;

这段代码会把所有层级的数组元素都转成带双引号的字符串,输出结果:

[["1","2"],["true","false"],"test"]

为什么不推荐正则替换?

举个例子,如果你的原始JSON里有字符串"it's true",用正则替换true为"true"的话,会把字符串里的true也给替换了,直接破坏原有内容。而用JSON模块解析后处理,只会针对数组元素的类型进行转换,完全不会影响字符串内部的内容。

内容的提问来源于stack exchange,提问作者N. Nageswara Rao

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 07:02:36