Thread JSON: mehrzeilige Werte in einzeilige umwandeln (6 answers)
Opened by GwenDragon at 2018-07-28 13:28

pq
 2018-07-28 15:27
#188696 #188696
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
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: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem

View full thread JSON: mehrzeilige Werte in einzeilige umwandeln