将JSON对象转换为查询字符串,然后返回到对象

时间:2011-10-31 21:21:41

标签: php json query-string magic-quotes

我知道这已被问过几次,但请耐心等待。

我有一个相当复杂的谷歌地图对象(它包含各种节点,坐标等),我试图将其作为查询字符串传递。

我需要一个播放javascript / jQuery解决方案。

我尝试过.param方法,它会产生jQuery错误。唯一有效的是“stringify”方法,然后创建一个字符串,当它显示为url看起来有点像这样:%7B%5C“shape_1%5C”%3A%7B%5C“color%5C”%3A %5C “%237F0000%5C” %2C%5C “数据%5C” %3A%7B%5C “b%5C” %3A%5B%7B%5C “娜%5C” %3A51.56727431757122%2C%5C” OA%5C“%3A-0.10462402858888709%7D%2C ...

php将其翻译为: {\\ “shape_1 \\”:{\\ “颜色\\”:\\ “#7F0000 \\”,\\ “数据\\”:{\\ “B \\”:[{\\“娜\\ “:51.56727431757122,\\” OA \\“: - 0.10462402858888709},...

但是说我不想使用PHP,我只是告诉你它做了什么,以防它看到stringify对对象做了什么。

在使用Javascript进行unescape之后,它看起来更加正常,如:

{\ “shape_1 \”:{\ “颜色\”:\ “#7F0000 \”,\ “数据\”:{\ “B \”:[{\ “娜\”:51.56727431757122,\“OA \“: - 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 个答案:

答案 0 :(得分:0)

请参阅http://php.net/manual/de/security.magicquotes.php - 您必须关闭魔术引号。他们是旧的,被弃用的东西,他们是不安全和破坏的东西。

  

Magic Quotes是一个自动将传入数据转义为PHP脚本的过程。最好使用魔术引号进行编码,并根据需要在运行时转义数据。

Howto:http://www.php.net/manual/de/security.magicquotes.disabling.php

答案 1 :(得分:0)

尝试将此查询字符串转换为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对象转换回查询字符串