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

Php 将JSON对象转换为查询字符串,然后再转换回对象,php,json,query-string,magic-quotes,Php,Json,Query String,Magic Quotes,我知道这已经被问了好几次了,但请容忍我 我有一个GoogleMaps对象,它相当复杂,它包含各种节点、坐标等,我试图将其作为查询字符串传递 我需要一个play javascript/jQuery解决方案 我尝试了.param方法,该方法给出了一个jQuery错误。唯一有效的方法是stringify方法,它会创建一个字符串,当作为url出现时,它看起来有点像这样:%7B%5Cshape_1%5C%3A%7B%5Ccolor%5C%3A%5C%237F0000%5C%2C%5Cdata%5C%3A%

我知道这已经被问了好几次了,但请容忍我

我有一个GoogleMaps对象,它相当复杂,它包含各种节点、坐标等,我试图将其作为查询字符串传递

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

我尝试了.param方法,该方法给出了一个jQuery错误。唯一有效的方法是stringify方法,它会创建一个字符串,当作为url出现时,它看起来有点像这样:%7B%5Cshape_1%5C%3A%7B%5Ccolor%5C%3A%5C%237F0000%5C%2C%5Cdata%5C%3A%7B%5Cb%5CNa%5C%3A51.56727431757122%5COa%5COa%3A-0.104624025888709%7D%2C

php将其翻译为: {\\shape\\u 1\\:{\\color\\:\\7F0000\\,\\data\\:{\\b\\:[{\\Na\\:51.56727431757122,\\Oa\\:-0.1046240285888709}

但是我已经说过我不想使用PHP,我只是向您展示它的功能,以防它帮助您了解stringify对对象的作用

在我使用Javascript卸载后,它看起来更正常一些,如:

{\shape\u 1\:{\color\:\7F0000\,\data\:{\b\:[{\Na\:51.56727431757122\Oa\:-0.1046240285888709}

正如您所看到的,未开槽的序列到处都有这些斜线。 当我尝试将其计算为JSON对象时,我得到了非法的token\。解析方法也失败了。我只是找不到任何方法将该字符串放回到它原来的复杂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"))));
尼克

看,你必须关掉魔法引号。它们是过时的、不受欢迎的东西,它们是不安全的、破坏性的东西

Magic Quotes是一个自动将传入数据转义到PHP脚本的过程。最好关闭Magic Quotes进行编码,并根据需要在运行时转义数据

如何:

请看-你必须关闭魔法引号。它们是过时的、不受欢迎的东西,它们是不安全的、破坏性的东西

Magic Quotes是一个自动将传入数据转义到PHP脚本的过程。最好关闭Magic Quotes进行编码,并根据需要在运行时转义数据


如何:

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

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

Ah是的,但我需要一个非PHP的解决方案。理想情况下,json字符串应该使用jQuery进行编码和解码。有解决方案吗?还有为什么jQuery的stringify方法会添加神奇的引号?我不使用PHP进行任何部分的查询process@Nick:嗯,什么?你写了,但php将其翻译为。是的,php就是这么做的,但我不使用它。理想情况下,我希望使用纯文本html@Nick:那么,当您只执行JSON.ParseDecodeComponentEncodeComponentJSON.stringifyyourObject时会发生什么情况?好的,这不起作用。如果我执行EncodeComponentJSON.stringifymyObject,我会得到如下字符串..%7B%22shape\u 1%22%3A%7B%22color%22%3A%22%237F0000%22%2C%22data%22%3A%7B%22b%22%3A%5B%7B%22Na%22%3A51.566634089631%2C%22Oa%22%3A…如果我使用JSON.parsedecodeURIComponentquery_字符串,我会得到一个javascript错误:意外的标记%,因此似乎编码器组件在不留下尾随%的情况下无法解码…你也尝试过吗?啊,是的,但我需要一个非PHP的字符串理想情况下,JSON字符串应该使用jQuery进行编码和解码。有解决方案吗?还有,为什么jQuery的stringify方法会添加神奇的引号?我没有使用PHP进行任何部分process@Nick:嗯,什么?是你写的,但php将其翻译为。是的,php就是这么做的,但我不使用它。理想情况下,我想使用plaiNhtml@Nick:那么,如果只执行JSON.parsedecodeURIComponentencodeURIComponentJSON.stringifyyourObject会发生什么情况?好的,那不行。如果我执行encodeURIComponentJSON.stringifymyObject,我会得到这样的字符串..%7B%22shape_1%22%3A%7B%22color%22%3A%22%237F0000%22%2C%22data%22%3A%7B%22Na%3A%5B%7B%22Na%3A51.566634089631%2C%22Oa%22%3And如果我使用JSON.parsedecodeURIComponentquery_字符串,我会得到一个javascript错误:意外的标记%s,因此似乎encodeURIComponent无法解码,而不留下尾随的%s…您也尝试过吗?如果可能的话,我会尽量避免尝试将JSON放入查询字符串中。如果数据量适中,您可以很容易地在长度。你能想出一种方法将这些坐标从表单传递到电子邮件,并从电子邮件返回到另一个html页面吗?将坐标从表单传递到电子邮件是什么意思?你想发送一封包含以下内容的电子邮件吗
坐标是多少?然后发送另一封创建HTML页面的电子邮件?如果可能的话,我会尽量避免将JSON放入查询字符串中。有了适量的数据,你很容易就会遇到长度限制。你能想出一种方法将这些坐标从表单传递到电子邮件,并从电子邮件传递回另一个html页面吗?将坐标从表单传递到电子邮件是什么意思?是否要发送包含坐标的电子邮件?然后发送另一封创建HTML页面的电子邮件?