【发布时间】:2012-09-19 20:26:29
【问题描述】:
我正在编写一个脚本,该脚本接收类似于此的对象数组的 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
【问题讨论】:
-
重新编辑:是的,当您使用 UTF-8 对某些内容进行两次编码时,在 UTF-8 终端上看起来会很奇怪。不要那样做。
-
记住
decode_json和encode_json的缩写。