Thread JSON: mehrzeilige Werte in einzeilige umwandeln
(6 answers)
Opened by GwenDragon at 2018-07-28 13:28
Ich würde die // per regex rauslöschen, dann mit YAML::XS laden und mit JSON::PP wieder rausschreiben. Nimm das neueste JSON::PP, um sicherzugehen, dass numerische Werte auch so wieder rausgeschrieben werden.
Oder Cpanel::JSON::XS. Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 use YAML::XS qw/ Load /; use JSON::PP; my $file = "jsonyaml.txt"; open my $fh, "<", $file or die $!; my $yaml = do { local $/; <$fh> }; close $fh; $yaml =~ s{^ *//.*$}{}mg; my $data = Load($yaml); my $coder = JSON::PP->new->ascii->pretty; print $coder->encode($data); Das sollte für die meisten Fälle funktionieren. Die Newlines werden in Leerzeichen umgewandelt beim Laden mit YAML. Davon abgesehen schickt der Kunde dir keine echten JSON-Dateien, wenn die Strings über mehrere Zeilen gehen. Das ist einfach kein valides JSON, weshalb ich es in Anführungszeichen schreiben würde ;-) Edit: bei der Regex, um // rauszulöschen, kann natürlich was schiefgehen, wenn die sich innerhalb eines multiline strings befinden und eigentlich erhalten bleiben sollten. Edit2: Du könntest die // durch YAML kommentare ersetzen. Dann bleiben die in den Strings erhalten und du kannst sie wieder in // umwandeln. Last edited: 2018-07-28 15:37:47 +0200 (CEST) Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wie frage ich & perlintro brian's Leitfaden für jedes Perl-Problem |