Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

json decoding in perl

Tags:

json

linux

perl

i have a json in a file sample.txt

i want to decode whole json and print key values by specifying. my per code is

#!/usr/bin/perl
use JSON; 
use Data::Dumper; 
use JSON::XS qw( decode_json );

open (han1, "sample.txt") or die "can not read this file ";
@array1 = <han1>; 
$tst =  $array1[0];
$text = decode_json $tst; 
print Dumper($text);

I have a key in json name 'messages_ready' . i want to print value of 'messages_ready'..

my json is follows

[
    {
        "arguments": {},
        "auto_delete": false,
        "backing_queue_status": {
            "avg_ack_egress_rate": 55.02128728993393,
            "avg_ack_ingress_rate": 55.02128728993393,
            "avg_egress_rate": 55.02128728993393,
            "avg_ingress_rate": 109.64602476156203,
            "delta": [
                "delta",
                0,
                0,
                0
            ],
            "len": 6465,
            "next_seq_id": 7847104,
            "pending_acks": 4,
            "persistent_count": 0,
            "q1": 0,
            "q2": 0,
            "q3": 0,
            "q4": 6465,
            "ram_ack_count": 4,
            "ram_msg_count": 6465,
            "target_ram_count": "infinity"
        },
        "consumers": 4,
        "durable": true,
        "exclusive_consumer_tag": "",
        "memory": 19373224,
        "message_stats": {
            "ack": 7840491,
            "ack_details": {
                "rate": 60.4
            },
            "deliver": 7840497,
            "deliver_details": {
                "rate": 60.4
            },
            "deliver_get": 7840498,
            "deliver_get_details": {
                "rate": 60.4
            },
            "get": 1,
            "get_details": {
                "rate": 0.0
            },
            "publish": 7847260,
            "publish_details": {
                "rate": 105.4
            },
            "redeliver": 3,
            "redeliver_details": {
                "rate": 0.0
            }
        },
        "messages": 6469,
        "messages_details": {
            "rate": 74.6
        },
        "messages_ready": 6465,
        "messages_ready_details": {
            "rate": 74.6
        },
        "messages_unacknowledged": 4,
        "messages_unacknowledged_details": {
            "rate": 0.0
        },
        "name": "reports",
        "node": "rabbit@ip-10-0-0-105",
        "policy": "",
        "status": "running",
        "vhost": "/"
    },
    {
        "arguments": {},
        "auto_delete": false,
        "backing_queue_status": {
            "avg_ack_egress_rate": 0.0,
            "avg_ack_ingress_rate": 0.0,
            "avg_egress_rate": 0.0,
            "avg_ingress_rate": 0.0,
            "delta": [
                "delta",
                "undefined",
                0,
                "undefined"
            ],
            "len": 1,
            "next_seq_id": 1,
            "pending_acks": 0,
            "persistent_count": 0,
            "q1": 0,
            "q2": 0,
            "q3": 0,
            "q4": 1,
            "ram_ack_count": 0,
            "ram_msg_count": 1,
            "target_ram_count": "infinity"
        },
        "consumers": 0,
        "durable": true,
        "exclusive_consumer_tag": "",
        "idle_since": "2013-12-31 13:03:35",
        "memory": 13760,
        "message_stats": {
            "publish": 1,
            "publish_details": {
                "rate": 0.0
            }
        },
        "messages": 1,
        "messages_details": {
            "rate": 0.0
        },
        "messages_ready": 1,
        "messages_ready_details": {
            "rate": 0.0
        },
        "messages_unacknowledged": 0,
        "messages_unacknowledged_details": {
            "rate": 0.0
        },
        "name": "test",
        "node": "rabbit@ip-10-0-0-105",
        "policy": "",
        "status": "running",
        "vhost": "/"
    }
]

How would i do this ? help me here...please

like image 649
user2916639 Avatar asked Jan 01 '14 13:01

user2916639


People also ask

What is JSON decoding?

An object that decodes instances of a data type from JSON objects.

What is JSON PP?

DESCRIPTION. JSON::PP is a pure perl JSON decoder/encoder, and (almost) compatible to much faster JSON::XS written by Marc Lehmann in C. JSON::PP works as a fallback module when you use JSON module without having installed JSON::XS.

How do you parse JSON in Python?

If you have a JSON string, you can parse it by using the json.loads() method. The result will be a Python dictionary.


1 Answers

  • decode_json() returns a reference to an array or hash depending on the data. In this case it's a reference to an array of hash references
  • The foreach loop uses @$json_data to access the array elements in $json_data, assigning each in turn to $section. $section is now a hash reference.
  • Use $section->{some-key} to access the keys, as in $section->{'messages_ready'}
  • Always remember to use strict

Something like this:

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

open (han1, "sample.txt") or die "can not read this file: $!\n";
my $json_string = join '', <han1>;
my $json_data = decode_json $json_string;

foreach my $section (@$json_data) {
    print "messages_ready: " . $section->{'messages_ready'} . "\n";
}
like image 82
grebneke Avatar answered Oct 18 '22 20:10

grebneke