【问题标题】:Convert encoded application/x-www-form-urlencoded post data to json object将编码的 application/x-www-form-urlencoded post 数据转换为 json 对象
【发布时间】:2017-12-05 19:00:44
【问题描述】:

客户端希望能够使用默认内容类型 content-type:"application/x-www-form-urlencoded; charset=UTF-8" 发出 xmlhttp ajax 请求,但以 API 的形式发送数据期望应用程序/json。所以请求是这样的:

  var settings = {
  "async": true,
  "crossDomain": true,
  "url": "http://localhost:80/api/metadata/taxonomy",
  "method": "POST",
  "headers": {
    "cache-control": "no-cache",
    "postman-token": "62a245ad-a0a2-4dd3-bf84-37f622f00b7d"
  },
  "processData": false,
  "data": "{\n\t\"practice\": [\"Learning\"]\n}"
}

$.ajax(settings).done(function (response) {
  console.log(response);
});

但 API 期望能够将 req.body 作为 JSON 对象获取,它可以立即使用:

"{"practice":["Learning"]}"

我可以将这个 "{\n\t\"practice\": [\"Learning\"]\n}" 转换成这个 "{"practice":["Learning"]}" 在一些安全/建议的方式? (没有一些自制的解析函数或正则表达式)

【问题讨论】:

    标签: javascript


    【解决方案1】:

    是的,JSON.parse 函数可以用于此:

    try{JSON.stringify(JSON.parse(data))}
    

    会将带有换行符的奇怪 json 转换为标准的单行字符串 json。

    JSON.parse 将json解析成一个对象

    JSON.stringify 将对象转换为单行格式的 JSON 对象

    try 如果传递了无效的 json 字符串,JSON.parse 将失败。 (\ns 在 json.parse 中有效)

    如果您的意思是将"{\n\"your\":\n \"object\"}" 转换为像{"your": "object"} 这样的javascript 对象,您可以使用try{JSON.parse(variablename)}

    根据these answers,对于较旧的浏览器,您可能需要JSON-js

    【讨论】:

      【解决方案2】:

      您实际上可以将 JSON 作为正文发布。

      var settings = {
        "async": true,
        "crossDomain": true,
        "url": "http://localhost:80/api/metadata/taxonomy",
        "method": "POST",
        "headers": {
          "cache-control": "no-cache",
          "postman-token": "62a245ad-a0a2-4dd3-bf84-37f622f00b7d"
        },
        "dataType" : "json"
        "processData": false,
        "data": { "practice": ["Learning"] }
      }
      
      $.ajax(settings).done(function (response) {
        console.log(response);
      });
      

      请注意,他们的新属性告诉要发布的数据类型是 JSON,现在在 data 属性中,值是 JSON 格式而不是字符串。

      希望这能解决您的问题。

      【讨论】:

        猜你喜欢
        • 2019-12-04
        • 2020-12-18
        • 2018-06-11
        • 2015-08-16
        • 2019-03-04
        • 1970-01-01
        • 2020-10-06
        • 2017-09-11
        • 2021-06-15
        相关资源
        最近更新 更多