【问题标题】:Adding to Perl arrays and hashes添加到 Perl 数组和散列
【发布时间】:2017-01-04 12:48:06
【问题描述】:

我目前正在处理 JSON 文件,从其中创建、添加、更改和删除数据。我现在完全迷失在数组哈希级别的问题上。

我有一个 JSON 文件,如下所示:

{
  "pages": {
    "page": [
      {
        "PID": "84634572",
        "UID": "2",
        "menu_order": "65",
        "status": "1",
        "name": "Blabla",
        "blocked": "0",
        "frontpage": "1",
        "content": [
          {
            "block1": "test3",
            "block2": "test2",
            "block3": "test5",
            "block4": "test1",
            "block5": "test4"
          }
        ],
      }
    ]
  }
}

我想在文件中添加更多页面,并想出了以下方法来构建从“PID”开始的字符串,然后再将其推送到现有文件:

my %rec_hash = (
    'PID'        => $PID,
    'menu_order' => '1',
    'status'     => '1',
    'name'       => $name,
    'content'    => {
        'block1' => $block1,
        'block2' => $block2,
        'block3' => $block3,
        'block4' => $block4,
        'block5' => $block5
    }
);

这在某种程度上可行,但我不会在“PID”之前得到起始大括号{。有关如何正确构建%rec_hash 的任何帮助?

【问题讨论】:

  • 您使用什么模块来创建 JSON? JSON::PPJSON::XSJSON::TinyCpanel::JSON::XS,还有别的吗?
  • 您将 pagecontent 作为包含单个哈希的数组。那是对的吗?同样,您将pages 作为包含单个数组page 的散列。我本来以为pages应该是一个数组,page是多余的,还是你绑定了别人的设计?
  • 先为人类格式化你的 json 怎么样? codebeautify.org/jsonviewer/cb62c7cf

标签: arrays json perl hash cgi


【解决方案1】:

你只需要

push @{ $data->{pages}{page} }, \%rec_hash;

但是你的%rec_hash有问题。

my %rec_hash = (
    PID        => $PID,
    UID        => $UID,              # <-- Was missing
    menu_order => '1',
    status     => '1',
    name       => $name,
    blocked    => '0',               # <-- Was missing
    frontpage  => '1',               # <-- Was missing
    content    => [                  # <-- Array was missing
        {
            'block1' => $block1,
            'block2' => $block2,
            'block3' => $block3,
            'block4' => $block4,
            'block5' => $block5,
        },
    ],
);

顺便说一句,这似乎是一个奇怪的数据结构。

  • pages 是一个单键关联数组。
  • 单数 page 是一个页面数组。
  • content 是一个单元素数组。

【讨论】:

    猜你喜欢
    • 2012-08-03
    • 2012-02-20
    • 2017-02-21
    • 2017-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-13
    相关资源
    最近更新 更多