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


convert JSON object to query string and then back to an object

我知道这个问题已经被问过几次了,但是请原谅我。

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

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

我已经尝试了.param方法,它给出了一个jQuery错误。唯一有效的是"stringify"方法,然后创建一个字符串,当出现为url时看起来有点像这样:%7B%5C"shape_1%5C"%3A%7B%5C"%3A%5C"%237F0000%5C"%2C%5C"%3A%7B%5C"b%5C"%3A%5B%7B%5C"Na%5C"% 3a51.56727431757122% 2C%5C"Oa%5C"%3A-0.10462402858888709%7D%2C....

php将其翻译为:{' ' " shape_1 ' ' ":{' '颜色' '":' ' " # 7 f0000 ' ' ", ' ' "数据' ' ":{' ' b ' ' ":[{' '"Na ' '":51.56727431757122,' ' " Oa ' ' ": -0.10462402858888709},…

但是我说过我不想用PHP,我只是给你展示它的功能,如果它能帮助你了解stringify对对象做了什么。

在我用Javascript unescape之后,它看起来更正常一些,像:

{'"shape_1 '":{'颜色'":'"# 7 f0000 '",'"数据'":{' b '":[{'"Na '":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"))));
尼克

参见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。参数方法将json对象转换回查询字符串