将数据传递给变量进行比较

问题描述:

我有一个请求,我让使用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,如果这是真的与其他变量它会得到preco2preco3打印一切

我的情况下,最大的问题是一些JSON这些名称包含类似字符(商标)那当属\u2122(某些情况下是其他字符),所以我不能与其他变量的名称已与正确的名称

nome1™ 

比较。如果我只能保存JSON已经“转换“这些角色会帮助我休息。

基本上在做API请求之后,我想将内容保存在一个变量中,该变量已经将所有\u2122转换为它们各自的字符(这是我不知道如何在Perl中完成的部分),然后使用另一个变量比较他们的名字等于显示价格

感谢您的帮助和任何问题,请告诉我,我尝试以另一种方式再次解释。

+1

你的微小的代码片段并没有说清楚你正在做什么。例如,'$ nome1json'是什么?请添加[mcve],以便我们可以更好地帮助您找到解决问题的方法。 –

+0

https:// stackoverflow。com/questions/10708297/perl-convert-a-string-to-utf-8-for-json-decode – xxfelixxx

+0

基本上,在完成对API的请求之后,我想将内容保存在一个已经将所有\ u2122转换为它们的变量中相应的字符(这是我不知道如何在Perl中完成的部分),然后使用另一个变量来比较它们的名称等于显示价格。如果我模糊地留下了问题,我很抱歉。 – edufgimenez

如果我理解正确,您需要将以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功能做相反的,也是一个面向对象的接口。

+0

认为最后一个'$ name'应该是'$ match'? –

+0

是的,我的错误。固定。谢谢。 –

+0

@JavierElices这工作得很好,但是我需要比较的变量的数据在UTF-8编码的txt中,txt中的数据已经有字符(★,™),有些名称只是纯文本而没有字符,所以你传递的代码只能在纯文本和任何提示的时候吸收名字? – edufgimenez