Valor de grep do arquivo json

1

meu arquivo json é parecido com isto

[{"product":"Apple","id":"2134"},{"product":"Mango","id":"4567"}]

Eu quero o grep / sed / awk 'id' para um determinado 'produto'.

Saída:

Enter product : Apple
Your product id is : 2134
    
por Srikanth Yadake 03.02.2016 / 14:41

5 respostas

1

sed é desajeitado, mas aqui está o que eu consegui -

sed  's/.*\(Apple\)[^:]*:"\([0-9]*\)".*/Enter product ID: \nYour  product ID is: /' 3
Enter product ID: Apple
Your product ID is: 2134

sed  's/.*\(Mango\)[^:]*:"\([0-9]*\)".*/Enter product ID: \nYour product ID is: /' 3
Enter product ID: Mango
Your product ID is: 4567

Editado com base na entrada mais recente, ligeiramente diferente

./prod.sed Apple
Enter product ID: Apple
Your product ID is: 1234

./prod.sed Mango
Enter product ID: Mango
Your product ID is: 12345

prod.sed (use 3rd line for publishName)

#sed  's/.*product_id":"\(Apple\).*"productBuildId":"\([0-9]*\)".*/Enter product ID: \nYour product ID is: /' data
sed  's/.*product_id":"\('"$1"'\).*"productBuildId":"\([0-9]*\)".*/Enter product ID: \nYour product ID is: /' data
sed  's/.*product_id":"\('"$1"'\)","publishName":"\([^"]*\)".*/Enter product ID: \nYour publish ID is: /' data

explanation : substitute the string <anything> Mango <anything other than :> : <number> with -> Your product ID is: Mango <next line> 
Your product ID is : <the number we got> 

  and  save the matched expression in \(..\) for later use.
    
por 03.02.2016 / 15:34
6

Use uma ferramenta compatível com JSON. O Perl tem a biblioteca JSON :

#!/usr/bin/perl
use warnings;
use strict;

use JSON;

my $json = '[{"product":"Apple","id":"2134"},{"product":"Mango","id":"4567"}]';

print 'Enter product: ';
chomp( my $product = <> );

print 'Your product id is: ', 
    (grep $_->{product} eq 'Apple', @{ from_json($json) })[0]{id}, "\n";
    
por 03.02.2016 / 14:52
2

Use um json parser, não sed / grep / awk .

Usando o Python json module:

#!/usr/bin/env python2
import json
with open('file.json') as f:
    f_json = json.load(f)
    print 'Enter product : ' + f_json[0]['product'] + '\nYour product id is : ' + f_json[0]['id']

Saída:

Enter product : Apple
Your product id is : 2134
    
por 03.02.2016 / 14:52
2

Eu criei um arquivo chamado json que se parece com isso:

[{"product":"Apple","id":"2134"},{"product":"Mango","id":"4567"},{"product":"Pear","id":"1111"},{"product":"Banana","id":"2222"}]

Então eu corro isso na linha de comando:

 cat json | sed -e 's/.\?{"product"\:\"\([^\"]\+\)\","id"\:\"\([[:digit:]]\+\)[^}]}\+.\?/Enter Product : \nYour Product id is : \n/mgi'

A saída é esta:

Enter Product : Apple
Your Product id is : 2134
Enter Product : Mango
Your Product id is : 4567
Enter Product : Pear
Your Product id is : 1111
Enter Product : Banana
Your Product id is : 2222
    
por 03.02.2016 / 16:27
0

Dada sua entrada, o seguinte comando sed ...

sed -e 's/[}"]*\(.\)[{"]*//g;y/,/\n/' <your_input

... irá escrever para a saída ...

[product:Apple
id:2134
product:Mango
id:4567]

... provavelmente você pode pegar a partir daí.

    
por 04.02.2016 / 13:54

Tags