以下代码始终使用双斜杠打印路径:
use JSON;
use File::Spec;
my $installdir = $ENV{"ProgramFiles"};
my $xptrlc = File::Spec->catfile($installdir,"bin","sample");
my $jobhash;
my $return_packet;
$jobhash->{'PATH'} = $xptrlc;
$return_packet->{'JOB'} = $jobhash;
my $js = new JSON;
my $str = $js->objToJson($return_packet);
print STDERR "===> $str \n";
此脚本的输出是
===> {"JOB":{"PATH":"C:\\Program Files (x86)\\bin\\sample"}}
删除那些双\\
斜杠的任何解决方案?
答案 0 :(得分:7)
提到Greg时,“\
”字符在JSON中表示为“\\
”。
答案 1 :(得分:4)
如果您打算在某个地方使用“解冻”JSON,就像在另一个Perl程序或JavaScript中一样,您仍然可以准确地获取您放入的内容。
您是否尝试使用JSON执行其他操作?
答案 2 :(得分:3)
Windows在路径中使用'/'
非常好,如果这太困扰你了:
use strict; use warnings;
use JSON;
use File::Spec::Functions qw(catfile);
my $installdir = $ENV{ProgramFiles};
my $xptrlc = catfile $installdir,qw(bin sample);
$xptrlc =~ s'\\'/'g;
my $packet = { JOB => { PATH => $xptrlc } };
my $js = JSON->new;
my $str = $js->encode($packet);
warn "===> $str \n";
输出:
===> {"JOB":{"PATH":"C:/Program Files/bin/sample"}}
另一方面,编码值将被正确解码:
use JSON;
warn JSON->new->decode(scalar <DATA>)->{JOB}->{PATH}, "\n";
__DATA__
{"JOB":{"PATH":"C:\\Program Files (x86)\\bin\\sample"}}
输出:
C:\Temp> ht C:\Program Files (x86)\bin\sample