Преобразовать объект 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 обратно в строку запроса.

Другие вопросы по тегам