【问题标题】:Parse a JSON body after multipart ajax Angular call在多部分 ajax Angular 调用后解析 JSON 正文
【发布时间】:2016-11-14 11:02:34
【问题描述】:

我正在尝试解析在使用 ajax angularJs 进行 api 调用后出现的主体。 调用后的响应是:

--3531b7e68196e3144197f82db0864b7e391c8b0ad51c4176c28f8ac41b3c
内容处置:表单数据;姓名=“护照”;文件名="passport.json"
内容类型:应用程序/json

{
    “名称”:“无”,
    "dob_display": "10/11/1997",
    "dob_accuracy": "FD",
    "owner_firstname": "什么都没有",
    "owner_surname": "理解"
}
--3531b7e68196e3144197f82db0864b7e391c8b0ad51c4176c28f8ac41b3c--

我没有找到从这个请求中获取正文的插件。我是否需要制作手动解析器,或者我可以获得另一个解决方案。 有人能帮我吗?

【问题讨论】:

  • 预期结果是什么?
  • 我的预期结果是 json { "name": "Nothing", "dob_display": "10/11/1997", "dob_accuracy": "FD", "owner_firstname": "Nothing" , "owner_surname": "To Understanding" } 之后就可以像 Angular 中的对象一样访问。
  • 不确定您如何接收原始的FormData 作为字符串?您可以在返回字符串的问题中包含javascript 吗?
  • 我正在使用 ajax.post 对服务器进行调用,响应就像我写的那样来了 :( 我需要该响应中的对象。{ "name": "Nothing" .....}

标签: javascript angularjs json multipartform-data multipart


【解决方案1】:

您可以在每个参数处使用String.prototype.slice()String.prototype.indexOf() 来获取"{""}"JSON.parse() 的索引。

let response = `--3531b7e68196e3144197f82db0864b7e391c8b0ad51c4176c28f8ac41b3c
Content-Disposition: form-data; name="passport"; filename="passport.json"
Content-Type: application/json

{
    "name": "Nothing",
    "dob_display": "10/11/1997",
    "dob_accuracy": "FD",
    "owner_firstname": "Nothing",
    "owner_surname": "To Understand"
}
--3531b7e68196e3144197f82db0864b7e391c8b0ad51c4176c28f8ac41b3c--`;

let json = JSON.parse(response.slice(response.indexOf("{")
           , response.indexOf("}") + 1));

let {name} = json;

console.log(json);
console.log({name});
console.log(name);

【讨论】:

  • 使用定制的解析器修复了所有问题。我将在下面发布所有内容。
【解决方案2】:

这是我在 API 调用之后解析任何表单数据的解决方案:

parser = function (data) {
  // this will split --1491test9246asaery134214
  // if you have multiple files in the response
  var dataArray = data.split(/--\S*[0-9a-z]/g), response = {};
  underscore.each(dataArray, function (dataBlock) {
    var rows = dataBlock.split('\n'),
        header = rows.splice(0, 4).slice(1, 3),
        body = rows.join('');

    if (header.length > 1) {
      var patternGetName = /(".*?")/g,
          name = patternGetName.exec(header[0])[0].replace(/(")/g, '');
      response[name] = body;
    }
  });
  return response;
};

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-21
    • 1970-01-01
    • 1970-01-01
    • 2014-10-10
    • 1970-01-01
    • 1970-01-01
    • 2022-11-10
    相关资源
    最近更新 更多