如何在 Perl 中创建特定的 json 对象

How to create a specific json object in Perl

我正在编写一个脚本,允许创建一个 json 对象,其中包含要与 SigmaJS 一起使用的特定图形的信息。

需要强调的是,用户必须指明必须进行多少次迭代才能定义图中将存在的节点数。 我是这种语言的新手,例如,在代码中将迭代放在 5 中。

use strict;
use warnings;
use JSON;
my $json_obj = new JSON;
my %perl_data;


for (my $i=0; $i <= 5 ; $i++) {
    $perl_data{nodes} = [{id => "..", label => "..", label => "..", x => ".." , y => ".." , size => ".."}];
    $perl_data{edges} = [{id => "..", source => "..", target => "..", color => ".."}];
}


print $json_obj->pretty->encode(\%perl_data);

我得到这个结果:

{
   "nodes" : [
      {
         "x" : "..",
         "id" : "..",
         "y" : "..",
         "label" : "..",
         "size" : ".."
      }
   ],
   "edges" : [
      {
         "target" : "..",
         "id" : "..",
         "color" : "..",
         "source" : ".."
      }
   ]
}

但我需要这样的东西:

{
  "nodes": [
    {
      "id": "n0",
      "label": "A node",
      "x": 0,
      "y": 0,
      "size": 3
    },
    {
      "id": "n1",
      "label": "Another node",
      "x": 3,
      "y": 1,
      "size": 2
    },
    {
      "id": "n2",
      "label": "And a last one",
      "x": 1,
      "y": 3,
      "size": 1
    }
  ],
  "edges": [
    {
      "id": "e0",
      "source": "n0",
      "target": "n1"
    },
    {
      "id": "e1",
      "source": "n1",
      "target": "n2"
    },
    {
      "id": "e2",
      "source": "n2",
      "target": "n0"
    }
  ]
}

您重复设置 $perl_data{nodes}$perl_data{edges} 而不是添加到它们引用的数组中。

my %perl_data = (
   nodes => [],
   edges => [],
);

for my $i (0..5) {
   push @{ $perl_data{nodes} }, {
      id    => "..",
      label => "..",
      x     => "..",
      y     => "..",
      size  => "..",
   };

   push @{ $perl_data{edges} }, {
      id     => "..",
      source => "..",
      target => "..",
      color  => "..",
   };
}