我们有一个庞大的代码库,可以大量使用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以便与现有代码向后兼容?
答案 0 :(得分:1)
当模块做出类似的剧烈变化时,应使用新名称。在这种情况下,JSON 2.x主要是JSON :: XS的包装器这一事实很方便,这意味着他们的所作所为。
我建议: