Monday, June 3, 2024
 Popular · Latest · Hot · Upcoming
16
rated 0 times [  17] [ 1]  / answers: 1 / hits: 17252  / 8 Years ago, tue, july 12, 2016, 12:00:00

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:strawberryperllib/JSON/PP.pm line 837
| JSON::PP::string() called at C:strawberryperllib/JSON/PP.pm line 960
| JSON::PP::object() called at C:strawberryperllib/JSON/PP.pm line 724
| JSON::PP::value() called at C:strawberryperllib/JSON/PP.pm line 907
| JSON::PP::array() called at C:strawberryperllib/JSON/PP.pm line 725
| JSON::PP::value() called at C:strawberryperllib/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:strawberryperllib/JSON/PP.pm line 148

More From » json

 Answers
5

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 }]

[#61414] Sunday, July 10, 2016, 8 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
chelseyn

Total Points: 36
Total Questions: 85
Total Answers: 89

Location: Laos
Member since Fri, Sep 11, 2020
4 Years ago
chelseyn questions
;