Разберите строку, чтобы получить сведения о массиве

Я получаю ответ от сервера, как показано ниже.

{
  "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.

Спасибо Арул

Вы пробовали использовать функцию JSON.parse ()?

Rakhi Prajapati 16.10.2018 09:02
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
1
72
7
Перейти к ответу Данный вопрос помечен как решенный

Ответы 7

это потому, что значение тела находится в строковом формате, и если вы хотите получить к нему доступ как к формату 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>
you can use simple for loop or $.each loop to iterate through the array

Я знаю, что, проанализировав строку, вы преобразуете ее в объект и получите значение. Но мой вопрос - получить значения catalogDetails: []. Мне нужен полный массив

Arulvelu 16.10.2018 09:06

@Arulvelu проверьте сейчас и дайте мне знать

Dhaval Pankhaniya 16.10.2018 09:10
Ответ принят как подходящий

Я делаю это следующим образом, и он работает. Я не могу разобрать объект целиком. Получите объект body отдельно вроде.

var body = JSON.parse(res["body"])

А затем используйте его следующим образом.

JSON.parse(res["body"]).OutputObject.Details.CatalogDetail

@Arulvelu Вы можете принять ответ, если он решит вашу проблему.

Sandip Nirmal 16.10.2018 13:58

Вам нужно разобрать тело как 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);

Другие вопросы по теме