私は、次のようなオブジェクトの配列の 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