我正在编写一个脚本,该脚本接收类似于以下对象数组的 JSON 代码:
{
"array":[
{ "id": 1, "text": "Some text" },
{ "id": 2, "text": "Some text" }
]
}
我使用 JSON::XS 对其进行解码,然后过滤掉一些结果。在此之后,我需要将每个单独节点的 JSON 代码存储到一个队列中以供以后处理。这个队列需要的格式也是 JSON,所以我需要为每个节点插入的代码是这样的:
{ "id": 1, "text": "Some text" }
但是,在decode_json解码一个节点之后,剩下的就是每个节点的哈希引用:
print $json->{'array'}[0]; # Would print something like HASH(0x7ffa80c83270)
我知道我可以在哈希引用上使用encode_json得到类似于原始 JSON 代码的东西,但是生成的代码与原始代码不同,UTF-8 字符变得很奇怪,而且似乎有很多额外的处理,特别考虑到该脚本必须处理的数据量。
有没有办法从解码的数组节点中检索原始 JSON 代码?JSON::XS 是否在解码后将原始块保留在某个地方?
编辑
关于奇怪的 UTF-8 字符,它们在屏幕上看起来很奇怪:
#!/usr/bin/perl
use utf8;
use JSON::XS;
binmode STDOUT, ":utf8";
$old_json = '{ "text": "Drag\u00f3n" }';
$json = decode_json($old_json);
print $json->{'text'}; # Dragón
$new_json = encode_json($json);
print $new_json; # {"text":"Dragón"}
$json = decode_json($new_json);
print $json->{'text'}; # Dragón