in reply to Re^2: polishing up a json fetching script for weather data
in thread polishing up a json fetching script for weather data

system ("cat $file | jq '[.paths.get]' >7.txt");

I very strongly recommend against doing it this way, for several reasons: First, you're using the shell's features, namely piping a file into jq when that's not necessary - jq filter files works just as well. Second, you're using the single-argument form of system, and interpolating a variable into that, opening yourself up to all sorts of possible issues; I describe that and several better alternatives here, in this case I might suggest capturex from IPC::System::Simple. Third, calling an external command in the first place - everything that jq can do, you can do just as well in Perl, by parsing the JSON file into a Perl data structure and then working with that data structure.

Replies are listed 'Best First'.
Re^4: polishing up a json fetching script for weather data
by Aldebaran (Curate) on May 23, 2020 at 08:20 UTC
    I very strongly recommend against doing it this way, for several reasons: First, you're using the shell's features, namely piping a file into jq when that's not necessary - jq filter files works just as well.

    I've read and worked through your post on varying system calls and am glad to have another link to it. The system call was a band-aid, because jq can't seem to do anything directly:

    $ pwd /home/hogan/Documents/hogan/json_stuff $ ls 1.openapi.json 2.weather.json russian-words.json 1.weather.json countries.geo.json snapshots $ jq '.' 1.openapi.json jq: error: Could not open file 1.openapi.json: Permission denied $

    Apparently I used 'snap' to install it:

    $ history | grep jq 1376 curl 'https://api.github.com/repos/stedolan/jq/commits?per_page +=5' 1377 jq '.[] | {message: .commit.message, name: .commit.committer.na +me}' 1378 sudo snap install jq

    I tried to raise priveleges with:

    1429 chmod a+x snap/bin/jq 1430 chmod a+x /snap/bin/jq 1431 sudo chmod a+x /snap/bin/jq

    , without success (??)

      jq: error: Could not open file 1.openapi.json: Permission denied

      It's complaining about the file 1.openapi.json, not the jq executable; try chmod a+r 1.openapi.json (if you don't mind giving everyone read access).