将数据传递给变量进行比较
我有一个请求,我让使用API在GET LWP::UserAgent
, 至多数据返回为JSON,至多两个结果如下:将数据传递给变量进行比较
{
"status":1,
"time":1507891855,
"response":{
"prices":{
"nome1\u2122":{
"preco1":1111,
"preco2":1585,
"preco3":1099
},
"nome2":{
"preco1":519,
"preco2":731,
"preco3":491
}
}
}
}
转储:
$VAR1 = {
'status' => 1,
'time' => 1507891855,
'response' => {
'prices' => {
'nome1' => {
'preco1' => 1111,
'preco3' => 1099,
'preco2' => 1585
},
'nome2' => {
'preco3' => 491,
'preco1' => 519,
'preco2' => 731
}
}
}
};
我想要做的是:
拿这个数据并把它保存在一个变量做出合作使用if
与另一个已存储名称的变量进行比较。比较将与name1
/name2
,如果这是真的与其他变量它会得到preco2
和preco3
打印一切
我的情况下,最大的问题是一些JSON这些名称包含类似字符(商标)那当属\u2122
(某些情况下是其他字符),所以我不能与其他变量的名称已与正确的名称
nome1™
比较。如果我只能保存JSON已经“转换“这些角色会帮助我休息。
基本上在做API请求之后,我想将内容保存在一个变量中,该变量已经将所有\u2122
转换为它们各自的字符(这是我不知道如何在Perl中完成的部分),然后使用另一个变量比较他们的名字等于显示价格
感谢您的帮助和任何问题,请告诉我,我尝试以另一种方式再次解释。
如果我理解正确,您需要将以UTF8格式接收的JSON获取到您可以处理的内部变量。对于这一点,你可以使用JSON::XS:
use utf8;
use JSON::XS;
my $name = "nome1™";
my $var1 = decode_json $utf8_encoded_json_text;
# Compare with name in $name
if(defined $var1->{'response'}->{'prices'}->{$name}) {
# Do something with the name that matches
my $match = $var1->{'response'}->{'prices'}->{$name};
print $match->{'preco1'}, "\n";
}
请务必告诉Perl解释器,你的来源是UTF8通过在脚本的开头指定use utf8;
。然后确保您正在使用支持该格式的编辑器编辑脚本。
功能decode_json
将返回ref到转换后的值。在这种情况下,一个哈希ref。从那里你可以进入JSON。
如果您知道$name
将会在JSON中,您可能会省略defined
部分。否则,defined
子句将告诉你散列值是否在那里。你知道,你可以用它做点什么。如果散列值是一个没有特殊字符的单个字,则可以使用$var1->{response}->{prices}->{$name}
,但使用$var1->{'response'}->{'prices'}->{$name}
总是比较安全。 Perl得到了一个难看的处理哈希引用...
顺便说一句,在JSON::XS
你还会发现encode_json
功能做相反的,也是一个面向对象的接口。
认为最后一个'$ name'应该是'$ match'? –
是的,我的错误。固定。谢谢。 –
@JavierElices这工作得很好,但是我需要比较的变量的数据在UTF-8编码的txt中,txt中的数据已经有字符(★,™),有些名称只是纯文本而没有字符,所以你传递的代码只能在纯文本和任何提示的时候吸收名字? – edufgimenez
你的微小的代码片段并没有说清楚你正在做什么。例如,'$ nome1json'是什么?请添加[mcve],以便我们可以更好地帮助您找到解决问题的方法。 –
https:// stackoverflow。com/questions/10708297/perl-convert-a-string-to-utf-8-for-json-decode – xxfelixxx
基本上,在完成对API的请求之后,我想将内容保存在一个已经将所有\ u2122转换为它们的变量中相应的字符(这是我不知道如何在Perl中完成的部分),然后使用另一个变量来比较它们的名称等于显示价格。如果我模糊地留下了问题,我很抱歉。 – edufgimenez