1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
#!/usr/bin/perl use strict; use warnings; use 5.010; use JSON; use utf8; my %parameter = ( json_charset => 'latin1', ); my $jsoncodierung = 'latin1'; my %hash = ( test => 'öäüßÖÄÜ@€', ); print JSON->new->$jsoncodierung->encode(\%hash); # funktioniert print JSON->new->$parameter{json_charset}->encode(\%hash); # syntax error at test.pl line 16, near "$parameter{json_charset" # wie schreibt man das richtig?
2014-04-12T08:37:35 GwenDragonWieso JSON->new->$jsoncodierung->... im Grunde genommen von Perl zu JSON->new->latin1()->... expandiert wird, hab ich gerade nicht parat.
1
2
3
The right side of the arrow typically is the method name, but a simple
scalar variable containing either the method name or a subroutine
reference can also be used.
print JSON->new->$jsoncodierung->encode(\%hash);
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
my %hash = ( test => 'ÄÖÜß' ); my $encoding = 'utf8'; use JSON; package JSON; sub set_encoding { my $self = shift; my $encoding = shift; return eval "\$self->can($encoding) && \$self->$encoding"; } 1; my $json = JSON->new; $json->set_encoding($encoding) or warn "unknown encoding: $encoding"; print $json->encode(\%hash); print "\n"; $encoding = 'latin1'; $json->set_encoding($encoding) or warn "unknown encoding: $encoding"; print $json->encode(\%hash); print "\n"; $encoding = 'deutsch1968'; $json->set_encoding($encoding) or warn "unknown encoding: $encoding"; print $json->encode(\%hash);
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
sub JSON::set_encoding { my ($self,$encoding)=@_; my $ok = eval { $self->can($encoding) or return 0; $self->$encoding(); return 1; }; die("UNKOWN ENCODING $encoding") unless($ok); return $self; } JSON->new->set_encoding($parameter{json_charset})->encode(\%hash);
print JSON->can($parameter{json_charset})->(JSON->new)->encode(\%hash);
2014-04-14T06:42:16 MuffiAber vielleicht gibt's auch einen sehr guten Grund warum quer über den Code JSON-Encodes verteilt sind.
2014-04-14T06:42:16 MuffiAber um auch was Sinnvolles beizutragen: Das sollte auch gehen.
QuoteNein, gibt es nicht. Aber auch wenn das nur an einer Stelle wäre möchte ich solche Sachen gern an zentraler Stelle in den Parametern pflegen können und nicht im Code.
1 2 3 4 5 6 7 8
sub serialisiere_hash { my ($hash, $encoding) = @_; my $json = JSON->new; if ($encoding eq 'latin1') ... elsif ... }
2014-04-14T07:54:09 MuffiUnd ich trau mir fast wetten, wenn man das ganze Aufgeräumt hat sind die ganzen JSON-Encodes weg - einfach so.
QuoteGute Frage. ;)Ja, aber welchen Umfang darf "aufräumen" haben, wenn es keiner bezahlt?
JSON->new->${ $parameter{json_charset} }->encode(\%hash)