2 Stimmen

Speichern der SOAP-Antwort als Hash

Ich versuche, die Antwort von einem Perl (v5.12.4) SOAP-Aufruf (SQL-Abfrage) als Hash für die weitere Verarbeitung unter Beibehaltung der Struktur der Daten zu speichern. Die Spalten werden variieren, daher möchte ich die Spaltenschlüssel dynamisch erstellen können. Hier ist ein Beispiel für die Antwort:

$VAR1 = {
      'row' => [
               #0
               {
                 'column1' => '',
                 'column2' => 'f',
                 'column3' => '0',
                 'column4' => '',
                 'column5' => 'f',
                 'column6' => '0',
                 'column7' => 'f',
               },
            ]
       };

Ich interessiere mich für die Spaltennamen und -werte. Ich habe einige (komische) Versuche unternommen, dies zu handhaben, wie zum Beispiel:

unless ($res->fault) {
  $Data::Dumper::Indent = 3;
  my (%reply) = $res->paramsall();
  foreach my $keys (keys %reply) {
    print "$keys\n";
  }
}

Dies führt zu der Meldung "Referenz gefunden, wo eine Liste mit gerader Größe in der Zeile script.pl erwartet wird...". Jeder Hinweis in die richtige Richtung ist hier sehr willkommen.

Danke

3voto

John Punkte 573

Diese :

$res->paramsall() 

gibt mit ziemlicher Sicherheit einen hashref zurück.

Sie weisen also den Hashref dem ersten Schlüssel von %reply zu.

my %reply = %{ $res->paramsall() };

Wird wahrscheinlich funktionieren.

Werfen Sie einen Blick auf perlreftut für einige Methoden, die mit Verweisstrukturen arbeiten.

Das Dereferenzieren von Hashes mit meinem %hash = %{ } erzeugt eine Kopie des referenzierten Hashes.
So können Sie direkt mit Hash-Refs arbeiten:

my $reply = $res->paramsall(); 

foreach my $key1 (keys %$reply) { 
  foreach my $key2 (keys %{ $reply->{$key1} }) { 
    print " $key2: " . $reply->{$key1}{$key2} . "\n"; 
  } 
}

Im 1. Codebeispiel in Ihrer Antwort wird diese :

$reply{$key2}->{$key2}

sollte lauten:

$reply{$key1}{$key2}

da alles bereits dereferenziert ist.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X