2016-11-14 50 views
-1

我試圖解析一個使用ajax angularJs的api調用之後發現的身體。 通話結束後的反應是:在多部分ajax之後解析JSON主體角度調用

--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--

我沒有找到一個插件來從這個請求得到了身體。我需要製作手動解析器還是可以獲得另一種解決方案。 有人可以幫我嗎?

+0

什麼是預期的結果? – guest271314

+0

請參閱['FormData'](https://xhr.spec.whatwg.org/#interface-formdata) – guest271314

+0

我的預期結果是json {name}:「Nothing」, 「dob_display」:「10/11/1997「, 」dob_accuracy「:」FD「, 」owner_firstname「:」Nothing「, 」owner_surname「:」要理解「 }並在此之後以角度訪問像對象。 – Vlad

回答

0

您可以在每個參數中使用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);

+0

修復了所有使用定製解析器的問題,我會在後面發佈一切。 – Vlad

0

這是我分析這是一個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; 
};