如何安全地从JSON 1升级到JSON 2和utf8字符串?

时间:2011-10-05 00:25:59

标签: json perl utf-8

我们有一个庞大的代码库,可以大量使用JSON v1 API:

use JSON;
my $json = objToJson($data);
my $data = jsonToObj($json);

我们想升级到JSON v2,因此我们可以在新代码中开始使用它,因为我们遇到了依赖于v2 API的其他模块。

但是,如果我存储了由objToJson()创建的utf8字符串,则JSON::XS将不再以相同的方式对其进行解码(这是JSON v2在幕后使用的)。 / p>

use JSON;
use JSON::XS;
use warnings;
use strict;

my $data    = ["\x{263a}b"];
my $encoded = JSON::objToJson($data);
print "different!\n"
  unless JSON::jsonToObj($encoded)->[0] eq JSON::XS::decode_json($encoded)->[0];
print "different!\n"
  unless JSON::jsonToObj($encoded)->[0] eq JSON::XS->new->decode($encoded)->[0];

我们有什么方法可以升级到JSON v2,但仍然留在v1 API以便与现有代码向后兼容?

1 个答案:

答案 0 :(得分:1)

当模块做出类似的剧烈变化时,应使用新名称。在这种情况下,JSON 2.x主要是JSON :: XS的包装器这一事实很方便,这意味着他们的所作所为。

我建议:

  1. 安装JSON 1.x.
  2. 安装JSON :: XS。
  3. 闲暇时,请将JSON 1.x转换为JSON :: XS。
  4. 如果您愿意,现在升级到JSON 2.x是安全的。
    1. 安装JSON 2.x
    2. S / JSON :: XS / JSON /克