簡體   English   中英

解析表單(POST)數據以創建多維哈希

[英]parse form (POST) data to create a multidimensional hash

我有一個用於提交有關多個人的數據的表格。 每個人都有多個屬性,我將它們分組如下:

<input type=hidden name="person1[firstname]" value='Sam'/>
<input type=hidden name="person1[lastname]" value='Higgins'/>

<input type=hidden name="person2[firstname]" value='Jiminy'/>
<input type=hidden name="person2[lastname]" value='Cricket'/>

...etc

當我執行以下操作時:

my %hash = params;
die Dumper \%hash;

我得到:

VAR1 = {
          'person1[firstname]' => 'Sam',
          'person1[lastname]' => 'Higgins',
          'person2[firstname]' => 'Jiminy',
          'person2[lastname]' => 'Cricket',
};

當我期待類似的東西:

VAR1 = {
          'person1' => { firstname => 'Sam', lastname => 'Higgens' },
          'person2' => { firstname => 'Jiminy', lastname => 'Cricket' },
};

有沒有辦法做到以上幾點,或者我在HTML中做錯了嗎?

編輯

我也嘗試在最后用空括號括起來:

<input type=hidden name="person1[firstname][]" value='Sam'/>

但這只是給了:

'person1[firstname][]' => 'Sam',
#!/usr/bin/perl
use Data::Dumper;
my $orginal = {
          'person1[firstname]' => 'Sam',
          'person1[lastname]' => 'Higgins',
          'person2[firstname]' => 'Jiminy',
          'person2[lastname]' => 'Cricket',
};  

my $result = {};
foreach my $key (keys %$orginal)
{
    $value = $orginal->{$key};
     $key =~ m/^(.*)\[(.*)\]$/;

     #$1 = for example person1
     #$2 = forexample firstname
     $result->{$1}->{$2} = $value;


}

print Dumper($result);
#RESULT:

# $VAR1 = {
#           'person1' => {
#                          'firstname' => 'Sam',
#                          'lastname' => 'Higgins'
#                        },
#           'person2' => {
#                          'firstname' => 'Jiminy',
#                          'lastname' => 'Cricket'
#                        }
#         };

要比提供鏈接更完整地回答問題:

我提供了一個使用jQuery的解決方案,特別是使用了一個插件( https://github.com/marioizquierdo/jquery.serializeJSON ),以異步方式(AJAX)發送數據,並使用了Dancers from_json方法,該方法創建了JSON 字符串的hashref 。

我強調字符串是因為serializeJSON插件提供的功能會創建一個JSON對象,並且該Dancer不會轉換為正確的結構。 因此,您需要使用JSON.stringify()創建一個JSON字符串,Dancer會接受:)

下面是代碼:

HTML示例:

<input type=hidden name="person1[firstname]" value='Sam'/>
<input type=hidden name="person1[lastname]" value='Higgins'/>

JS(jQuery):

var formData = $(this).serializeJSON();
console.log(formData);
$.ajax({
     'url': '/your_url',
     'type': 'POST',
     'data': JSON.stringify(formData),
     'success': function(res){
         console.log(res);
   }
 });

Perl(Dancer):

post '/your_url' => sub {
    my $json = request->body;
    use Data::Dumper;
    my $hashref = {};
    $hashref = from_json($json);
    die Dumper \$hashref->{person1}->{name}; # 'Sam'
}

感謝所有的幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM