Convert String to an Array using shell scripting in JSON file.


 
Thread Tools Search this Thread
Top Forums UNIX for Beginners Questions & Answers Convert String to an Array using shell scripting in JSON file.
# 8  
Old 11-27-2019
The normal practice would be to redirect to a temporary file and then move the temp file over the original.

Code:
jq -c '.....' infile > /tmp/jqtemp.$$ && mv -f /tmp/jqtemp.$$ infile

This User Gave Thanks to Chubler_XL For This Post:
# 9  
Old 11-28-2019
There are a couple of things I'm a little unhappy with in my proposed solution and I'd like to update to a more robust version.

Firstly if the JSON structure contains array of objects decend() stops drilling down at the array.
Second the IP address RE is inaccurate and and gets false positives eg 999.999.999.999.

These issues are illustrated by the following example:
Code:
{
  "non-ip" : "999.2.3.1",
  "Adaptors" : [
     {"device" : "ip01" , "gateway" : "192.168.0.1" , "net_mask" : "255.255.0.0" },
     {"device": "ip12", "network_ip_v4_address":["10.38.61.1","10.38.32.1"]}
  ]
}

I have tightened down IP address RE and enhanced the decend() function it now takes a parent object parameter and will not apply f to string objects parented by arrays:
Code:
jq -c '
def decend(p;f):
  . as $in
  | if type == "object" then
    reduce keys_unsorted[] as $key
( {}; . + { ($key) : ($in[$key] | decend($in;f)) } ) | f
elif type == "array" then map( decend($in;f) ) | f
elif (p | type) == "array" then .
else f
end;
decend(.;
   if type == "string" and
       test(
           "^(" +
           "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)" +
           "\\.){3}" +
           "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)" +
           "$")
   then [ . ] else . end)' infile

The example above is not converted correctly:
Code:
{
  "non-ip" : "999.2.3.1",
  "Adaptors" : [
      {"device" : "ip01", "gateway" : ["192.168.0.1"], "net_mask" : ["255.255.0.0"]},
      {"device" : "ip12", "network_ip_v4_address" : ["10.38.61.1", "10.38.32.1"]}
  ]
}

This User Gave Thanks to Chubler_XL For This Post:
# 10  
Old 11-29-2019
Thats Great!! I really appreciate it. Thank you so much.. you made my day as I was struggling from quite few days.

This piece of code didn't work for me. Anyways this is not required in my case I believe. --- Firstly if the JSON structure contains array of objects decend() stops drilling down at the array.
Code:
def decend(p;f):
  . as $in
  | if type == "object" then
    reduce keys_unsorted[] as $key
( {}; . + { ($key) : ($in[$key] | decend($in;f)) } ) | f
elif type == "array" then map( decend($in;f) ) | f
elif (p | type) == "array" then .
else f
end;


This piece of code, I mean the Regex is working --- Second the IP address RE is inaccurate and and gets false positives eg 999.999.999.999.
Code:
decend(.;
   if type == "string" and
       test(
           "^(" +
           "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)" +
           "\\.){3}" +
           "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)" +
           "$")
   then [ . ] else . end)

Moderator's Comments:
Mod Comment
Use code tags as per our rules please.

Last edited by Peasant; 11-29-2019 at 02:11 AM..
# 11  
Old 11-29-2019
Any reason why the jq code in the shell script is not executing when run from crontab. The shell code other than jq is executing properly without any issue. How to make it working? anything to do with bashprofile & how to do it? Thanks!
# 12  
Old 11-29-2019
My first guess would be the PATH variable doesn't contain the folder where jq is stored. I'd try specifying a PATH in your script:

Find where jq is installed eg:
Code:
$ type jq
jq is hashed (/usr/bin/jq)

Now specify a sane PATH at the top of your cron script:
Code:
#!/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

How to convert any shell command output to JSON format?

Hi All, I am new to shell scripting, Need your help in creating a shell script which converts any unix command output to JSON format output. example: sample df -h command ouput : Filesystem size used avail capacity Mounted /dev/dsk/c1t0d0s0 8.1G 4.0G 4.0G 50% /... (13 Replies)
Discussion started by: balu1234
13 Replies

2. Shell Programming and Scripting

Array size in C shell scripting

Hi, I would like to know how to define the size of the array in c shell scripting. (15 Replies)
Discussion started by: gopishrine
15 Replies

3. Shell Programming and Scripting

Read csv file, convert the data and make one text file in UNIX shell scripting

I have input data looks like this which is a part of a csv file 7,1265,76548,"0102:04" 8,1266,76545,"0112:04" I need to make the output data should look like this and the output data will be part of text file: 7|1265000 |7654899 |A| 8|12660000 |76545999 |B| The logic behind the... (6 Replies)
Discussion started by: RJG
6 Replies

4. Shell Programming and Scripting

Convert json to xml

Hello everyone, I have created a workflow that will pull down data via a RESTful API in JSON, then my code parses and modifies said data. The problem I have is that these APIs I am working with only accept XML to PUT/POST data, and I am looking for an easy way to convert my JSON file to XML. ... (2 Replies)
Discussion started by: Zaphod_B
2 Replies

5. Shell Programming and Scripting

UNIX or Perl script to convert JSON to CSV

Is there a Unix or Perl script that converts JSON files to CSV or tab delimited format? We are running AIX 6.1. Thanks in advance! (1 Reply)
Discussion started by: warpmail
1 Replies

6. Programming

Perl array / json

Hi All I have used the below code to print the dumper of a json #!/usr/bin/perl use LWP::Simple; use JSON qw( decode_json ); use Data::Dumper; use strict; use warnings; my (%list); my $trendsurl =... (5 Replies)
Discussion started by: ab52
5 Replies

7. Shell Programming and Scripting

How to convert string into integer in shell scripting?

Hi All, sessionid_remote=$(echo "select odb_sessionid from sysopendb where odb_dbname='syscdr';" | sudo -u cucluster ssh ucbu-aricent-vm93 "source /opt/cisco/connection/lib/connection.profile; $INFORMIXDIR/bin/dbaccess sysmaster@ciscounity") for sid in $sessionid_remote;do if * ]];... (2 Replies)
Discussion started by: deeptis
2 Replies

8. Shell Programming and Scripting

array + if in linux shell scripting

Hi, I am having two set of files with different number of columns and rows. A set of files have only single row with 20 columns. B set of files have 1000s of rows with 5 columns. both set contains equal number of files. I want to save all the 20 columns of A in variables one by one and... (21 Replies)
Discussion started by: CAch
21 Replies

9. Shell Programming and Scripting

how to convert array into the string

Hi I have a line/string as follows: A=" 3498 NORDEA - INDX LINKED NORY" which was converted into an array of characters: p321$ echo "${ARR}" 3 4 9 8 N O R D E A - I N D X L I N K E D N O R Y When I am trying print this array there are blank... (4 Replies)
Discussion started by: aoussenko
4 Replies

10. Shell Programming and Scripting

How to Rename/Convert Files in Shell Scripting?

Hi All, I want to Rename/Convert all the .doc files in to .pdf format. I am using the following Script. But the final output is not proper. ########################################## cd /u13/prepaid/ftpdata/INfiles/sap/ for name in `ls *.doc` do name1=`echo $name | sed -e... (11 Replies)
Discussion started by: hanu_oracle
11 Replies
Login or Register to Ask a Question