[挑战]JSON格式 与 Perl数据格式互转,按特定规则格式化
发表于 : 2019年06月23日 20:21
具体的说是 Echarts.js 中使用的 JSON 格式
参考:https://www.echartsjs.com/examples/edit ... area-stack
Parser 的部分不自己写,使用现成的工具 —— JSON 模块
但会遇到一些格式约束的问题,比如有很多关键字没有带双引号,有很多是单引号,用正则做一些替换之后可以正确转换。
data : ['周一','周二','周三','周四','周五','周六','周日'],不要每个数值都换行缩进:
(JSON 的 encode_json 和 to_json 函数输出的效果都差很远,即使使用不同的参数。)
参考:https://www.echartsjs.com/examples/edit ... area-stack
Code: [show] | [select all]
但会遇到一些格式约束的问题,比如有很多关键字没有带双引号,有很多是单引号,用正则做一些替换之后可以正确转换。
要求是,输出 Perl 的数据格式时,该缩进的时候缩进,尽可能接近原来JSON的风格。在遇到一序列数组的时候,比如use Encode; use File::Slurp; use Data::Dump qw/dd dump/; use JSON qw/encode_json decode_json from_json/; STDOUT->autoflush(1); my $s = read_file("original.json"); # 处理关键字未引用的问题 $s =~s/(\w+):/"$1":/g; $s =~s/(\w+)\s+:/"$1":/g; # 单引号转双引号 $s =~s/'/"/g; $s =~s/option =//; $s =~s/};/}/; #print encode('gbk', decode('utf8', $s)); dd from_json($s, {utf8=>1});
data : ['周一','周二','周三','周四','周五','周六','周日'],不要每个数值都换行缩进:
反过来,从 Perl 数据格式转为JSON,也要尽量接近最初该JSON的风格,这个输出要手写函数。legend => { data => [ "\x{90AE}\x{4EF6}\x{8425}\x{9500}", "\x{8054}\x{76DF}\x{5E7F}\x{544A}", "\x{89C6}\x{9891}\x{5E7F}\x{544A}", "\x{76F4}\x{63A5}\x{8BBF}\x{95EE}", "\x{641C}\x{7D22}\x{5F15}\x{64CE}", ], },
(JSON 的 encode_json 和 to_json 函数输出的效果都差很远,即使使用不同的参数。)