Why do I get the error "unexpected end of string while parsing JSON string" when decoding a URI-encoded JSON string?

12,878

Do you realise that you ned to escape the data only for GET requests? That's why the function is called encodeURIComponent, because the resulting string is for use within a URL. In POST requests the data is passed in the message body, not in the URL

I see that you're using the JSON::PP module, which works fine with the simple JSON string that you show. Here's an example program that shows the resulting data structure dumped using Data::Dump

Acccording to the error log you're encoding the JSON data when you shouldn't be. If I replace the JSON data below with encodeURIComponent then I get the error message

unexpected end of string while parsing JSON string, at character offset 3 (before "22%22:%22#%22,%22jed...")

which is as you described, and what the error log confirms

use strict;
use warnings 'all';

use JSON::PP;
use Data::Dump;

my $json = '[{"":"#","jednostka":"","login":"SA"}]';

my $data = JSON::PP::decode_json($json);

dd $data;

output

[{ "" => "#", "jednostka" => "", "login" => "SA" }]
Share:
12,878
Piotr Bielski
Author by

Piotr Bielski

Updated on June 26, 2022

Comments

  • Piotr Bielski
    Piotr Bielski almost 2 years

    I'm trying to POST some JSON data to my Perl script, but the JSON module seems to be unable to cope with this string:

    [{"":"#","jednostka":"","login":"SA"}]
    

    I used encodeURIComponent() in JavaScript, so my string actually looks like this:

    [{%22%22:%22#%22,%22jednostka%22:%22%22,%22login%22:%22SA%22}]
    

    Error log:

    JSON::PP::decode_error('unexpected end of string while parsing JSON string') called at C:\strawberry\perl\lib/JSON/PP.pm line 837
    |   JSON::PP::string() called at C:\strawberry\perl\lib/JSON/PP.pm line 960
    |   JSON::PP::object() called at C:\strawberry\perl\lib/JSON/PP.pm line 724
    |   JSON::PP::value() called at C:\strawberry\perl\lib/JSON/PP.pm line 907
    |   JSON::PP::array() called at C:\strawberry\perl\lib/JSON/PP.pm line 725
    |   JSON::PP::value() called at C:\strawberry\perl\lib/JSON/PP.pm line 688
    |   JSON::PP::PP_decode_json('JSON::PP=HASH(0xd0c2534)', '[{%22%22:%22#%22,%22jednostka%22:%22%22,%22login%22:%22SA%22}]', 0) called at C:\strawberry\perl\lib/JSON/PP.pm line 148
    
    • Krishnakumar_Muraleedharan
      Krishnakumar_Muraleedharan almost 8 years
      How are you parsing the JSON? Have you tried JSON.parse('[{"":"#","jednostka":"","login":"SA"}]') ?
    • Ronen Ness
      Ronen Ness almost 8 years
      I'm not sure why you need the encodeURIComponent(). doesn't it work without it? and shouldn't you do decode on the other side?
    • Quentin
      Quentin almost 8 years
  • Piotr Bielski
    Piotr Bielski almost 8 years
    Someone fuction after Encoding change " to %22 that was problem. I need to change value="VALUE " to value='Value'. End no change " to %22 in html.
  • Piotr Bielski
    Piotr Bielski almost 8 years
    Other option is replace " to &qout;