1

以下の例では、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 ループを使用する多くの方法を試しましたが、常に失敗しました。

4

2 に答える 2