Преобразовать объект JSON в строку запроса, а затем обратно в объект
Я знаю, что об этом спрашивали несколько раз, но, пожалуйста, потерпите меня.
У меня есть объект Google Maps, который является довольно сложным (он содержит различные узлы, координаты и т. Д.), И я пытаюсь передать его в виде строки запроса.
Мне нужно решение Play Javascript/ JQuery.
Я попробовал метод.param, который дает ошибку jQuery. Единственное, что работает, это метод "stringify", который затем создает строку, которая при отображении в виде URL выглядит примерно так: %7B%5C"shape_1%5C"%3A%7B%5C"цвет%5C"%3A%5C"%237F0000%5C"%2C%5C% "данные 5C" % 3A% 7B% 5C "б%5C"%3A%5B%7B%5C"На%5C"%3A51.56727431757122%2C%5C" Оа%5C"%3A-0,10462402858888709% 7D% 2C....
php переводит это как: {\\"shape_1\\":{\\"color\\":\\"#7F0000\\",\\"data\\":{\\"b\\":[{\\"\\ Na":51,56727431757122,\\"\\ Оа":- +0,10462402858888709},...
но, сказав, что я не хочу использовать PHP, я просто покажу вам, что он делает, в случае, если он помогает вам увидеть, что stringify сделал с объектом.
После того, как я удалился с Javascript, он выглядит немного более нормально, как:
{\ "Shape_1\":{\"цвет \":\"#7F0000\",\"данные \":{\"Ъ \":[{\"На \":51,56727431757122,\"Оа \":-0,10462402858888709},..
Итак, как вы можете видеть, последовательность без выхода имеет эти косые черты повсюду. Когда я пытаюсь преобразовать это в объект JSON, я получаю "Незаконный токен". Метод разбора также не работает. Я просто не могу найти способ поместить эту строку обратно в сложный объект JSON, которым она была. Я искал в Интернете различные предложения, но они терпят неудачу. Я также не понимаю, почему stringify вводит все эти косые черты, которых просто не должно быть. Если у кого-то есть идея, как взять этот объект, поместить его в строку запроса и затем проанализировать его, я был бы очень признателен.
Ник
Обновление: ответ таков:
encodeURIComponent(JSON.stringify(myObject));
А затем на приемном конце:
var a = querySt("data");
var b = decodeURIComponent(a);
var c = unescape(b);
var d = JSON.parse(c);
или все в одной строке
JSON.parse(unescape(decodeURIComponent(querySt("data"))));
Ник
2 ответа
Смотрите http://php.net/manual/de/security.magicquotes.php - вы должны отключить магические кавычки. Они старые, устаревшие вещи, они небезопасны и ломают вещи.
Magic Quotes - это процесс, который автоматически сбрасывает входящие данные в скрипт PHP. Желательно кодировать с отключенными магическими кавычками и вместо этого экранировать данные во время выполнения по мере необходимости.
Howto: http://www.php.net/manual/de/security.magicquotes.disabling.php
Попробуйте это преобразовать строку запроса в объект json
var queryStringToJSON = function (url) {
if (url === '')
return '';
var pairs = (url || location.search).slice(1).split('&');
var result = {};
for (var idx in pairs) {
var pair = pairs[idx].split('=');
if (!!pair[0])
result[pair[0].toLowerCase()] = decodeURIComponent(pair[1] || '');
}
return result;
}
Вы можете использовать метод jQuery.param для преобразования объекта json обратно в строку запроса.