【问题标题】:Parse JSON from a multi-part http response? (In postman)从多部分 http 响应中解析 JSON? (在邮递员中)
【发布时间】:2017-05-11 06:50:07
【问题描述】:

我正在调用一个返回多部分 HTTP 响应的 Web api。

的形式
...possible other content...

--97b6f48d-7f7e-4e96-bd0b-ced047222460
Content-Type: application/json; charset=utf-8

{"key":"this is the JSON"}
--97b6f48d-7f7e-4e96-bd0b-ced047222460--

...possible other content...

我只想要 JSON:{"key":"this is the JSON"}

GUID 97b6f48d-7f7e-4e96-bd0b-ced047222460 是一个边界标识符,用于识别随机生成的 http 响应部分。

我知道响应中只有一部分包含 JSON 内容。我提取它的最佳方法是什么?

仅供参考,我在邮递员中使用脚本,所以它需要是 javascript。

【问题讨论】:

  • 看起来很像这个问题:stackoverflow.com/q/21229418/215552,但我不知道 Postman 是如何编写脚本的。顺便说一句,你可能想领导它,而不是埋葬它。
  • 你可以在邮递员脚本中使用正则表达式吗?如果是,那么我认为这将是在字符串中获取对象的最佳方法。
  • @Yousef_Shamshoum 我考虑过这一点,但考虑到 JSON 的递归结构,我认为正则表达式不是合适的解决方案。如果我要手动解析它,最好的办法是扫描第一个和最后一个括号。 (假设我知道响应中只有一个 JSON 文档)
  • 你能提供一个返回你的多部分 http 响应的 URL 吗?不能只用 GUID 边界分割responseBody,然后解析 JSON 吗?
  • @shaochuancs 我无法提供网址。是的,这是我的默认计划,解析响应以查找 JSON。做起来很简单,但很乱。我希望有一些标准的方法来拆分邮递员中的响应,因为它是一个 HTTP 标准

标签: javascript json http postman


【解决方案1】:

我还没有找到任何自动方法来拆分邮递员中的多部分 HTTP 响应,所以我求助于解析整个响应并找到 {...} JSON

由于我确定在整个多部分响应中只有一个 JSON 文档对象,因此我可以查找最外面的括号。

它利用一个计数器变量来跟踪开/关括号。当计数器达到零时(在找到一个左括号后,它将计数器设置为1),我们知道我们已经找到了 JSON 的结尾。

这是代码:

//find the JSON in the multi part response
var p, q;
var foundFirstBracket = false;
var stackCount = 0;
for(var i = 0; i < responseBody.length; i++)
{
    if(responseBody[i] === '{')
    {
        if(!foundFirstBracket) 
        {
            foundFirstBracket = true;
            p = i;
        }
        stackCount++;
    }
    else if(responseBody[i] === '}') 
    {
        stackCount--;
    }
    if(stackCount === 0 && foundFirstBracket)
    {
        q = i;
        break;
    }
}
var jsonString = responseBody.substring(p, q+1);
var jsonData = JSON.parse(jsonString);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 2015-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多