以下の例では、asn1 定義に schoolId と student の 2 つのタグがあります。タグ生はSEQUENCEのSEQUENCEです。次のような JSON 形式の aa ファイルから学生情報を取得します。
{"school1": [{"name": "jason","id": 12345, "age": 14}, {"name": "カレン","id": 12346, "age": 14}, {"name": "mike","id": 12347, "age": 15}]}
{"school2": [{"name": "dave","id": 12645, "age": 16}, {"name": "angel","id": 12346, "age": 14}, {"名前": "スーザン","ID": 12347, "年齢": 15}]}
そのため、学校ごとに生徒数が異なります。私の質問は、学生の数が不特定であるため、学生タグをエンコードする方法です。ご協力いただきありがとうございます!
use Convert::ASN1;
use Data::Dumper;
my %scope = qw(base 0 one 1 single 1 sub 2 subtree 2);
my %deref = qw(never 0 search 1 find 2 always 3);
my $search_pdu = Convert::ASN1->new;
$search_pdu->prepare(q(
SEQUENCE {
schoolId INTEGER,
student [0] SEQUENCE OF SEQUENCE {
name STRING,
id INTEGER,
age INTEGER
}
}
)) or die $search_pdu->error;
$buf = $search_pdu->encode(
schoolId => 1001,
student => [
{
name => "Jason Howard",
id => 310089,
age => 14
},
{
name => " Angel Disante",
id => 310456,
age => 15
}
]
);
$Data::Dumper::Indent = 1;
print Dumper( $search_pdu->decode($buf));
$h = unpack("H*",$buf);
print $h,"\n";
私の質問、たとえば、学校 1 に 100 人の生徒がいて、学校 2 に 300 人の生徒がいる場合、.......、エンコード関数で for ループを使用して、プログラムで生徒数を把握する方法はありますか?
$student_json = "{"school-1001": [{"name": "jason","id": 12345, "age": 14}, {"name": "karen","id": 12346, "age": 14},{"name": "mike","id": 12347, "age": 15}]}";
student => [
for my $hashref (@{$student_json}) {
{
name => $hashref->{'name'},
id => $hashref->{'id'},
age => $hashref->{'age'}
}
]
プログラムでエンコードするために上記のように for ループを使用する多くの方法を試しましたが、常に失敗しました。