in reply to Re^2: the sad reality of perl
in thread the sad reality of perl

I've just started looking at JSON data, and for (my) educational purposes, would like to see how the entire task gets done in the greatest generality. It seems that all of the values for 'label' are the ones beginning with caps. JSON material gets bought up in SoPW fairly frequently, but I don't see any tutorial about it as I scroll through. (Maybe a question like this could motivate one.)

$ ./1.json.pl $VAR1 = { 'portals' => { 'idOthers' => { 'label' => 'Others', 'bkmrk' => { 'id1524573612772 +224' => { + 'label' => 'Jerilderie Library', + 'guid' => 'ee648daae1954dfaae922dbf8b73b628.16', + 'latlng' => '-35.355555,145.725977' + }, 'id1524573424316 +121' => { + 'label' => 'Cobram Court House', + 'guid' => 'da1fa66c47e04ab8bd63ca889477fc64.16', + 'latlng' => '-35.919043,145.64944' + }, 'id1524017595214 +323' => { + 'latlng' => '-40.121934,148.016741', + 'guid' => '9c02931bd84a44f09d0eb7d528440dde.16', + 'label' => 'Flinders Anchor' + }, 'id1524017542894 +278' => { + 'label' => 'Finley and District Museum', + 'latlng' => '-35.651077,145.572401', + 'guid' => '981d883b207a4f469d1cfd6ef6a83c99.16' + }, 'id1524018933096 +574' => { + 'label' => 'The Blowholes', + 'latlng' => '-38.379673,141.369564', + 'guid' => 'f9f356e2a6cb4311b8d5e6b8597e9f10.16' + }, 'id1524573178960 +029' => { + 'label' => 'Murraay Valley Trail', + 'latlng' => '-35.812108,145.564549', + 'guid' => '4807ea2a1f5446eca437f30d00249070.16' + }, 'id1519870156505 +020' => { + 'label' => 'Moomba Airport', + 'latlng' => '-28.101867,140.198912', + 'guid' => 'bd3c83881e864833a1d6ba7f74d48932.16' + }, 'id1524018796438 +428' => { + 'label' => 'Griffith Water Tank 3', + 'latlng' => '-34.276904,146.053927', + 'guid' => '729ba75fe8af4915ad0171398308dd1a.16' + }, 'id1525240907654 +076' => { + 'latlng' => '-37.10952,142.412065', + 'guid' => 'f7f0413875e849f0bd4144deeb2e1dd3.16', + 'label' => 'Keep Wildlife Wild' + }, 'id1524017431668 +144' => { + 'latlng' => '-35.354197,145.725536', + 'guid' => 'cef5a3a6052b4db5918f240633c87d1a.16', + 'label' => 'Horgan Walk' + }, 'id1524017293988 +041' => { + 'label' => 'MacDonnell Water Tower', + 'guid' => '5d28dfb8e5c74235bcb6ebabe7db137e.16', + 'latlng' => '-38.052737,140.699065' + } }, 'state' => 1 } }, 'maps' => { 'idOthers' => { 'state' => 1, 'bkmrk' => { 'id1517321708544042 +' => { + 'label' => 'Thornbury', + 'z' => 15, + 'latlng' => '-37.758959,145.002408' + }, 'id1524907539056020 +' => { + 'label' => 'Melbourne wide', + 'z' => 10, + 'latlng' => '-37.736512,145.266724' + }, 'id1526128108894092 +' => { + 'label' => 'Melbourne city', + 'z' => 15, + 'latlng' => '-37.814412,144.963698' + }, 'id1517404948177044 +' => { + 'label' => 'SE Oz', + 'latlng' => '-37.383253,146.799316', + 'z' => 7 + } }, 'label' => 'Others' } } }; $ cat 1.json.pl #!/usr/bin/perl -w use 5.011; use warnings; use Data::Dumper; use JSON; my $json = <DATA>; my $perl = decode_json $json; print Dumper $perl; __DATA__ {"maps":{"idOthers":{"label":"Others","state":1,"bkmrk":{"id1517321708 +544042":{"label":"Thornbury","latlng":"-37.758959,145.002408","z":15} +,"id1517404948177044":{"label":"SE Oz","latlng":"-37.383253,146.79931 +6","z":7},"id1524907539056020":{"label":"Melbourne wide","latlng":"-3 +7.736512,145.266724","z":10},"id1526128108894092":{"label":"Melbourne + city","latlng":"-37.814412,144.963698","z":15}}}},"portals":{"idOthe +rs":{"label":"Others","state":1,"bkmrk":{"id1519870156505020":{"guid" +:"bd3c83881e864833a1d6ba7f74d48932.16","latlng":"-28.101867,140.19891 +2","label":"Moomba Airport"},"id1524017293988041":{"guid":"5d28dfb8e5 +c74235bcb6ebabe7db137e.16","latlng":"-38.052737,140.699065","label":" +MacDonnell Water Tower"},"id1524017431668144":{"guid":"cef5a3a6052b4d +b5918f240633c87d1a.16","latlng":"-35.354197,145.725536","label":"Horg +an Walk"},"id1524017542894278":{"guid":"981d883b207a4f469d1cfd6ef6a83 +c99.16","latlng":"-35.651077,145.572401","label":"Finley and District + Museum"},"id1524017595214323":{"guid":"9c02931bd84a44f09d0eb7d528440 +dde.16","latlng":"-40.121934,148.016741","label":"Flinders Anchor"}," +id1524018796438428":{"guid":"729ba75fe8af4915ad0171398308dd1a.16","la +tlng":"-34.276904,146.053927","label":"Griffith Water Tank 3"},"id152 +4018933096574":{"guid":"f9f356e2a6cb4311b8d5e6b8597e9f10.16","latlng" +:"-38.379673,141.369564","label":"The Blowholes"},"id1524573178960029 +":{"guid":"4807ea2a1f5446eca437f30d00249070.16","latlng":"-35.812108, +145.564549","label":"Murraay Valley Trail"},"id1524573424316121":{"gu +id":"da1fa66c47e04ab8bd63ca889477fc64.16","latlng":"-35.919043,145.64 +944","label":"Cobram Court House"},"id1525240907654076":{"guid":"f7f0 +413875e849f0bd4144deeb2e1dd3.16","latlng":"-37.10952,142.412065","lab +el":"Keep Wildlife Wild"},"id1524573612772224":{"guid":"ee648daae1954 +dfaae922dbf8b73b628.16","latlng":"-35.355555,145.725977","label":"Jer +ilderie Library"}}}}} $
There seems to be a fair amount of CPAN material with it: https://metacpan.org/search?q=JSON

Replies are listed 'Best First'.
Re^4: the sad reality of perl
by Your Mother (Archbishop) on Oct 10, 2018 at 22:27 UTC

    JSON is pretty easy so you probably won’t see tutorials on it here. It’s also not Perl; tutorials abound elsewhere. If it doesn’t feel easy, slow down. It’s not magic. It’s just plain data notation, extremely similar to data structures in Perl (mostly just anonymous hashes and arrays). It’s also arbitrarily loaded. You can’t make assumptions like “label” or “titlecase.” It’s not meaningful in JSON, just in this particular data structure. This is JSON: [ 1, 2, 5, "Three, Sire!" ]. So is this: { "o":"hai", "name-o":"બિન્ગો" }. It’s easy to play with–

    perl -CSD -MYAML -MJSON -e 'print Dump(decode_json(shift))' '{ "name-o":"બિન્ગો" }'
    ---
    name-o: બિન્ગો
    
    perl -MYAML -MJSON -e 'print Dump(decode_json(shift))' '[ 1, 2, 5, "Th +ree, Sire!" ]' --- - 1 - 2 - 5 - 'Three, Sire!'

    Like any well-defined format it should be handled with a proper parser and writer and not regular expressions. JSON docs are just waiting to be read. :P

    Update, fixed typo/drift in code output.