in reply to How can we retrieve encode_json value which is in encode_json associative array formate.

It's very unclear to me where your problem is and what you are trying to do. Your code does also not run by itself, as it does not show encode_json and decode_json.

I'm not sure whether you want to know how to produce JSON strings or decode them. The easiest way is to use JSON::Any and JSON::XS.

If you want to know how to use the data structures returned by JSON, see perlreftut and perldsc, and maybe References Quick Reference.

If your problem is elsewhere, please restate it so it gets clearer to me.

  • Comment on Re: How can we retrieve encode_json value which is in encode_json associative array formate.
  • Select or Download Code

Replies are listed 'Best First'.
Re^2: How can we retrieve encode_json value which is in encode_json associative array formate.
by Anonymous Monk on Mar 06, 2011 at 19:14 UTC

    I want to send  a associative array as a value in json array.



    for example i create a array like.


    %responce_array1=();

    $responce_array1{'REQUEST'}{'Items'{0}{'ItemName'}='demoName0';
    $responce_array1{'REQUEST'}{'Items'}{1}{'ItemName'}='demoName1';
    $responce_array1{'REQUEST'}{'Items'}{2}{'ItemName'}='demoName2';


    my $itemjson_ary1 = encode_json \%responce_array1;


    and pass it to as a value of a another array like :-

    %responce_array2=();

    $responce_array2{'item_json_array'}=$itemjson_ary1;

    and json encode it like :-

    my $itemjson_ary2 = encode_json \%responce_array2;

    it gives out put  as below json encoded array.:-


    print $itemjson_ary2;

    $jsonary='{"item_json_array":"{\"REQUEST\":{\"Items\":{\"1\":{\"ItemName\":\"demoName1\"},\"0\":{\"ItemName\":\"demoName0\"},\"2\":{\"ItemName\":\"demoName2\"}}}}"}';


    Now the problem is  how can  i retrive "ItemName" value.

    because for  example i  take  three values  like 0,1,2 but these can be  many 0,1,2,3,4...

    so i want to retrieve all these value in a loop.or any  way to convert it in to array so we can get these array.

    my whole code as follows.


    use JSON;

    %responce_array1=();
    %responce_array2=();


    $responce_array1{'REQUEST'}{'Items'{0}{'ItemName'}='demoName0';
    $responce_array1{'REQUEST'}{'Items'}{1}{'ItemName'}='demoName1';
    $responce_array1{'REQUEST'}{'Items'}{2}{'ItemName'}='demoName2';

    my $itemjson_ary1 = encode_json \%responce_array1;

    $responce_array2{'item_json_array'}=$itemjson_ary1;

    my $itemjson_ary2 = encode_json \%responce_array2;

    print $itemjson_ary2;

    $jsonary='{"item_json_array":"{\"REQUEST\":{\"Items\":{\"1\":{\"ItemName\":\"demoName1\"},\"0\":{\"ItemName\":\"demoName0\"},\"2\":{\"ItemName\":\"demoName2\"}}}}"}';


    #here  i am decode these json array to get "item_json_array" value .

    $dec_json_obj = decode_json $jsonary;
    $temp=$dec_json_obj->{item_json_array};



    #here  i am decode these json array to get "REQUEST" value .

    $dec_json_obj = decode_json $temp;
    $temp=$dec_json_obj->{REQUEST}; #hash form
    $dec_json_obj=&get_hash_to_str($temp);



    #here  i am decode these json array to get "Items" value .
    $temp=$dec_json_obj->{Items};
    $dec_json_obj=&get_hash_to_str($temp);


    #here  i am decode these json array to get "0" value .
    $temp=$dec_json_obj->{0};
    $dec_json_obj=&get_hash_to_str($temp);


    #here  i am decode these json array to get "ItemName" value .
    print $temp=$dec_json_obj->{ItemName};

    #out put is demoName0

    # its subroutine to convert hash to string

    sub get_hash_to_str($temp)
    {
    my $temp=$_[0];
    my $enc_json_req = encode_json $temp;
    print"
    ";
    print $enc_json_req;
    print"
    ";
    my $dec_json_obj = decode_json $enc_json_req;
    return $dec_json_obj;
    }

      Is that large amount of code necessary to ask how to iterate over an array that you only have a reference to?

      Please read perlreftut and/or References Quick Reference. They explain about references and how to iterate over array references. Also see Data::Dumper for printing out the data structure you have.

      Most likely you just want:

      use Data::Dumper; for my $key (keys %{ $dec_json_obj->{item_json_array}->{REQUEST}->{Ite +ms} }) { print "Key: $key\n"; print "Value: " . Dumper $dec_json_obj->{item_json_array}->{REQUES +T}->{Items}->{ $key }; };
        Thanks for your help... Now with your given code its working fine..