Как закодировать эту строку в JSON? - PullRequest
3 голосов
/ 25 мая 2011

У меня есть эта строка JSON

$json_string = qq{{"error" : "User $user doesn't exist."}};

который я строю, так сказать, на низком уровне.

Как мне кодировать его с помощью модуля JSON?

Прямо сейчас я кодирую хэши вот так

use JSON;
my $json_string;

my $json = JSON->new;
$json = $json->utf8;

my $data;
$data->{users}  = $json->encode(\%user_result);
$data->{owners} = $json->encode(\%owner_result);
$json_string    = to_json($data);

print $cgi->header(-type => "application/json", -charset => "utf-8");
print $json_string;

Ответы [ 3 ]

6 голосов
/ 25 мая 2011

Ратна прав - вы не можете кодировать простую строку (если вы не поместите ее в список или хэш)

Вот несколько вариантов кодирования вашей строки:

use strict;
use warnings;
use JSON;

my $user = "Johnny";

my $json_string = { error_message => qq{{"error" : "User $user doesn't exist."}} } ;
$json_string    = to_json($json_string);
print "$json_string\n";

#i think below is what you are looking for
$json_string = { error => qq{"User $user doesn't exist."} };
$json_string    = to_json($json_string);
print $json_string;
1 голос
/ 15 марта 2017

Я не знаю, была ли добавлена ​​функциональность после ответов, но вы МОЖЕТЕ кодировать строку json, используя perl, используя модуль JSON.

Использование allow_nonref:

$json = $json->allow_nonref([$enable])

$enabled = $json->get_allow_nonref

Если $ enable равно true (или отсутствует), то метод кодирования может преобразовать не ссылка на соответствующую ему строку, число или ноль JSON значение, которое является расширением к RFC4627. Аналогично, декодер примет эти значения JSON вместо квакирования.

Код и цитата из https://metacpan.org/pod/release/MAKAMAKA/JSON-2.90/lib/JSON.pm#allow_nonref

1 голос
/ 25 мая 2011

JSON должно быть либо {key:value}, либо [element]

Заданная строка ошибки:

qq{{"error" : "User $user doesn't exist."}}
Насколько мне известно,

недействительно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...