【问题标题】:convert JSON object to query string and then back to an object将 JSON 对象转换为查询字符串,然后再转换回对象
【发布时间】:2011-10-31 21:21:40
【问题描述】:

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

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

我需要一个 play 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"Na%5C"%3A51.56727431757122%2C%5C" OA%5C"%3A-0.10462402858888709%7D%2C....

php 将其翻译为: {\\"shape_1\\":{\\"color\\":\\"#7F0000\\",\\"data\\":{\\"b\\":[{\\"Na \\":51.56727431757122,\\"Oa\\":-0.10462402858888709},...

但我已经说过我不想使用 PHP,我只是向你展示它的作用,以防它帮助你了解 stringify 对对象做了什么。

在我使用 Javascript 取消转义后,它看起来有点正常,例如:

{\"shape_1\":{\"color\":\"#7F0000\",\"data\":{\"b\":[{\"Na\":51.56727431757122,\"Oa \":-0.10462402858888709},..

如您所见,未转义的序列到处都有这些斜线。 当我尝试将其评估为 JSON 对象时,我得到“非法令牌 \”。 parse 方法也失败了。我只是找不到任何方法将此字符串放回原来的复杂 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"))));

尼克

【问题讨论】:

  • 如果可能的话,我会避免尝试将 JSON 放入查询字符串中。使用适量的数据,您很容易遇到长度限制。
  • 您能想出一种方法将这些坐标从表单传递到电子邮件,然后从电子邮件传回另一个 html 页面吗?
  • 将坐标从表单传递到电子邮件是什么意思?您要发送包含坐标的电子邮件吗?然后发送另一封创建 HTML 页面的电子邮件?

标签: php json query-string magic-quotes


【解决方案1】:

http://php.net/manual/de/security.magicquotes.php - 你必须关闭魔术引号。它们是旧的、已弃用的东西,它们不安全且会破坏。

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

操作方法:http://www.php.net/manual/de/security.magicquotes.disabling.php

【讨论】:

  • 嗯,是的,但我需要一个非 PHP 解决方案。理想情况下,应该使用 jQuery 对 JSON 字符串进行编码和解码。有解决方案吗?还有为什么jQuery的“stringify”方法会添加魔术引号?我没有在流程的任何部分使用 PHP
  • @Nick:嗯,什么?您写了“但 php 将其翻译为”。
  • 是的,这就是 PHP 所做的,但我不使用它。理想情况下,我想使用纯 html
  • @Nick:那么,当你只做 JSON.parse(decodeURIComponent(encodeURIComponent(JSON.stringify(yourObject)))) 时会发生什么?
  • 好吧,这行不通。如果我确实 encodeURIComponent(JSON.stringify(myObject)) 我得到一个这样的字符串.. %7B%22shape_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.parse(decodeURIComponent(query_string)) 我得到一个 javascript 错误: "unexpected token %" 所以看起来 "encodeURIComponent" 不能在不留下尾随 % 的情况下被解码......你也试过了吗?
【解决方案2】:

试试这个把查询字符串转换成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 对象转换回查询字符串

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-11
    • 2021-06-12
    • 1970-01-01
    • 1970-01-01
    • 2018-05-03
    • 1970-01-01
    相关资源
    最近更新 更多