Я получаю ответ от сервера, как показано ниже.
{
"statusCode": 200,
"body": "{\"Errors\":\"\",\"Message\":\"\",\"Output\":\"\",\"TokenID\":\"F106457749C\",\"OrgID\":0,\"OutputObject\":{\"Details\":{\"CatalogDetail\":[{\"CatalogID\":74,\"CategoryID\":22,\"ShortCatalogName\":\"Email Forwarding\",\"CatalogName\":\"Email Forwarding\",\"Description\":\"Use this catalog for email forwarding \",\"IsVendor\":false,\"IsPackage\":false,\"AncestorParent_CategoryID\":58,\"IsEntitled\":0,\"CategoryName\":\"Email\",\"ServiceCatalogBGColor\":\"\"}],\"BaseUrl\":\"https://serviceimg-attachments\"}}}",
"headers": {
"cache-control": "private",
"content-type": "application/octet-stream",
"server": "Microsoft-IIS/8.5",
"set-cookie": [
"ASP.NET_SessionId=m0jbtyi12mzefkkyh3xd4i0m; path=/; HttpOnly",
".ASPXAUTH=41C6BC3E87DBF106457749C; path=/"
],
"x-aspnet-version": "4.0.30319",
"x-powered-by": "ASP.NET",
"date": "Mon, 15 Oct 2018 17:51:09 GMT",
"connection": "close",
"content-length": "779"
}
}
Я хочу разобрать тело reponse.body, которое является строкой. Причина разбора - получить массив response.body.OutputObject.Details.CatalogDetail. Но когда я это делаю, я получаю Details as undefined. Может ли кто-нибудь помочь мне получить массив CatalogDetail.
Спасибо Арул



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


это потому, что значение тела находится в строковом формате, и если вы хотите получить к нему доступ как к формату json, вам нужно сначала его проанализировать, проверьте ниже фрагмент кода для получения дополнительной информации.
var response = {
"statusCode": 200,
"body": "{\"Errors\":\"\",\"Message\":\"\",\"Output\":\"\",\"TokenID\":\"F106457749C\",\"OrgID\":0,\"OutputObject\":{\"Details\":{\"CatalogDetail\":[{\"CatalogID\":74,\"CategoryID\":22,\"ShortCatalogName\":\"Email Forwarding\",\"CatalogName\":\"Email Forwarding\",\"Description\":\"Use this catalog for email forwarding \",\"IsVendor\":false,\"IsPackage\":false,\"AncestorParent_CategoryID\":58,\"IsEntitled\":0,\"CategoryName\":\"Email\",\"ServiceCatalogBGColor\":\"\"},{\"CatalogID\":75,\"CategoryID\":22,\"ShortCatalogName\":\"Email Forwarding2\",\"CatalogName\":\"Email Forwarding2\",\"Description\":\"Use this catalog for email forwarding \",\"IsVendor\":false,\"IsPackage\":false,\"AncestorParent_CategoryID\":58,\"IsEntitled\":0,\"CategoryName\":\"Email\",\"ServiceCatalogBGColor\":\"\"}],\"BaseUrl\":\"https://serviceimg-attachments\"}}}",
"headers": {
"cache-control": "private",
"content-type": "application/octet-stream",
"server": "Microsoft-IIS/8.5",
"set-cookie": [
"ASP.NET_SessionId=m0jbtyi12mzefkkyh3xd4i0m; path=/; HttpOnly",
".ASPXAUTH=41C6BC3E87DBF106457749C; path=/"
],
"x-aspnet-version": "4.0.30319",
"x-powered-by": "ASP.NET",
"date": "Mon, 15 Oct 2018 17:51:09 GMT",
"connection": "close",
"content-length": "779"
}
}
var body = JSON.parse(response.body)
var Catelogs = body.OutputObject.Details.CatalogDetail;
for(var i=0;i<Catelogs.length;i++){
console.info("CatalogID : " + Catelogs[i].CatalogID)
console.info("ShortCatalogName : " + Catelogs[i].ShortCatalogName);
}
$.each(Catelogs, function( index, value ) {
console.info( "CatalogID : " + value.CatalogID );
console.info( "ShortCatalogName : " + value.ShortCatalogName );
});<script src = "https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>Я знаю, что, проанализировав строку, вы преобразуете ее в объект и получите значение. Но мой вопрос - получить значения catalogDetails: []. Мне нужен полный массив
@Arulvelu проверьте сейчас и дайте мне знать
Я делаю это следующим образом, и он работает. Я не могу разобрать объект целиком. Получите объект body отдельно вроде.
var body = JSON.parse(res["body"])
А затем используйте его следующим образом.
JSON.parse(res["body"]).OutputObject.Details.CatalogDetail
@Arulvelu Вы можете принять ответ, если он решит вашу проблему.
Вам нужно разобрать тело как json. Вероятно, какой бы фреймворк вы ни использовали, он имеет метод, подобный response.json(), но вы можете просто использовать JSON.parse.
response = {
"statusCode": 200,
"body": "{\"Errors\":\"\",\"Message\":\"\",\"Output\":\"\",\"TokenID\":\"F106457749C\",\"OrgID\":0,\"OutputObject\":{\"Details\":{\"CatalogDetail\":[{\"CatalogID\":74,\"CategoryID\":22,\"ShortCatalogName\":\"Email Forwarding\",\"CatalogName\":\"Email Forwarding\",\"Description\":\"Use this catalog for email forwarding \",\"IsVendor\":false,\"IsPackage\":false,\"AncestorParent_CategoryID\":58,\"IsEntitled\":0,\"CategoryName\":\"Email\",\"ServiceCatalogBGColor\":\"\"}],\"BaseUrl\":\"https://serviceimg-attachments\"}}}",
"headers": {
"cache-control": "private",
"content-type": "application/octet-stream",
"server": "Microsoft-IIS/8.5",
"set-cookie": [
"ASP.NET_SessionId=m0jbtyi12mzefkkyh3xd4i0m; path=/; HttpOnly",
".ASPXAUTH=41C6BC3E87DBF106457749C; path=/"
],
"x-aspnet-version": "4.0.30319",
"x-powered-by": "ASP.NET",
"date": "Mon, 15 Oct 2018 17:51:09 GMT",
"connection": "close",
"content-length": "779"
}
}
body = JSON.parse(response.body)
body.OutputObject.Details.CatalogDetail
Попробуйте вот так:
var myObject = JSON.parse("my json string");
Используйте JSON.parse(data.body) для синтаксического анализа строки в JSON, и вы можете выполнять любые операции,
Узнать больше JSON.parse
Ниже приведен фрагмент
var data = {
"statusCode": 200,
"body": "{\"Errors\":\"\",\"Message\":\"\",\"Output\":\"\",\"TokenID\":\"F106457749C\",\"OrgID\":0,\"OutputObject\":{\"Details\":{\"CatalogDetail\":[{\"CatalogID\":74,\"CategoryID\":22,\"ShortCatalogName\":\"Email Forwarding\",\"CatalogName\":\"Email Forwarding\",\"Description\":\"Use this catalog for email forwarding \",\"IsVendor\":false,\"IsPackage\":false,\"AncestorParent_CategoryID\":58,\"IsEntitled\":0,\"CategoryName\":\"Email\",\"ServiceCatalogBGColor\":\"\"}],\"BaseUrl\":\"https://serviceimg-attachments\"}}}",
"headers": {
"cache-control": "private",
"content-type": "application/octet-stream",
"server": "Microsoft-IIS/8.5",
"set-cookie": [
"ASP.NET_SessionId=m0jbtyi12mzefkkyh3xd4i0m; path=/; HttpOnly",
".ASPXAUTH=41C6BC3E87DBF106457749C; path=/"
],
"x-aspnet-version": "4.0.30319",
"x-powered-by": "ASP.NET",
"date": "Mon, 15 Oct 2018 17:51:09 GMT",
"connection": "close",
"content-length": "779"
}
};
var output = JSON.parse(data.body);
console.info(output.OutputObject.Details.CatalogDetail);Используйте JSON.parse, а затем получите доступ к свойству https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Property_accessors для получения дополнительных исх.
var obj = {
"statusCode": 200,
"body": "{\"Errors\":\"\",\"Message\":\"\",\"Output\":\"\",\"TokenID\":\"F106457749C\",\"OrgID\":0,\"OutputObject\":{\"Details\":{\"CatalogDetail\":[{\"CatalogID\":74,\"CategoryID\":22,\"ShortCatalogName\":\"Email Forwarding\",\"CatalogName\":\"Email Forwarding\",\"Description\":\"Use this catalog for email forwarding \",\"IsVendor\":false,\"IsPackage\":false,\"AncestorParent_CategoryID\":58,\"IsEntitled\":0,\"CategoryName\":\"Email\",\"ServiceCatalogBGColor\":\"\"}],\"BaseUrl\":\"https://serviceimg-attachments\"}}}",
"headers": {
"cache-control": "private",
"content-type": "application/octet-stream",
"server": "Microsoft-IIS/8.5",
"set-cookie": [
"ASP.NET_SessionId=m0jbtyi12mzefkkyh3xd4i0m; path=/; HttpOnly",
".ASPXAUTH=41C6BC3E87DBF106457749C; path=/"
],
"x-aspnet-version": "4.0.30319",
"x-powered-by": "ASP.NET",
"date": "Mon, 15 Oct 2018 17:51:09 GMT",
"connection": "close",
"content-length": "779"
}
}
var formated = JSON.parse(obj.body);
var CatalogDetail = formated.OutputObject.Details.CatalogDetail[0];
console.info(CatalogDetail);
Вы должны проанализировать json перед доступом к объекту, JSON.parse проанализирует строку json.
var json = '{"result":true, "count":42}';
obj = JSON.parse(json);
Вы пробовали использовать функцию JSON.parse ()?