Thread Daten aus einer JSON-Response referenzieren
(5 answers)
Opened by NickHatBoecker at 2019-06-17 10:22
Wie rosti schon schrieb, könntest Du die Datenstruktur direkt in ein Template-System geben.
Wenn Du es per Hand machen willst: 1. Die Variablen $a und $b sind für ![]() 2. Den letzten Index eines Array erhälst Du mit der Schreibweise $#array. 3. Unter "countries" steht eine Array-Referenz, kein Array. Ich würde das nicht in ein Array @items schieben, sondern direkt verwenden. 4. Ein Zugriff auf @items[0] sollte Dir eine Warnung ausgeben, wenn Du Bei Zugriff auf ein Element schreibt man ein $; also $items[0]; bei mehreren dann das @; z.B. @items[0,1,2]. 5. Verwende bitte immer use strict und use warnings. Die beiden helfen Dir beim Programmieren. Hier ein ungetesteter Fix-Versuch Deines Codes: Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 sub main { if ($mode ne 'EDIT') { return; } # Receive an array reference my $countries = _getData(); if ( 0 == scalar @$countries ) { return ""; } my $html = ""; # $#{$countries} is last index of array reference $countries for (my $i = 0 ; $i <= $#{$countries} ; $i++) { if (defined $countries->[$i]->{"id"}) { # option selection will be automatically set by Imperia $html .= sprintf( '<option value="%s">%s</option>', $countries->[$i]->{"id"}, encode_utf8($countries->[$i]->{"label"}), ); } } return $html; } sub _getData { my $url = sprintf( "%s%s", $ENV{'API_BASE_URL'}, "/ajax/imperia/countrylist/de" ); my $ua = LWP::UserAgent->new(ssl_opts => { verify_hostname => 1 }); my $header = HTTP::Request->new(GET => $url); my $request = HTTP::Request->new('GET', $url, $header); my $response = $ua->request($request); if (!$response || $response->is_error || !$response->is_success) { return; } my $response = decode_json($response->content); return $response->{"countries"}; } edit: kleinere Textänderung Last edited: 2019-06-17 17:07:52 +0200 (CEST) meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen! |