将编码的application / x-www-form-urlencoded post数据转换为json对象

时间:2017-12-05 19:00:44

标签: javascript

客户希望能够使用内容类型的默认内容类型生成xmlhttp ajax请求:" application / x-www-form-urlencoded;字符集= UTF-8"但是以API期望application / 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 \"练习\":[\"学习\"] \ n}"对此" {"练习":["学习"]}"以某种安全/建议的方式? (没有一些自制的解析函数或正则表达式)

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

您实际上可以将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格式而不是字符串。

希望这能解决你的问题。