У меня есть этот объект JSON, к которому я не знаю, как получить доступ - консоль только печатает undefined.

Я не знаю, как получить доступ к нескольким ключам с помощью двоеточий.

Объект JSON:

 {
  'soapenv:Envelope': {
    '$': {
      'xmlns:soapenv': 'http://schemas.xmlsoap.org/soap/envelope/',
      'xmlns:soapenc': 'http://schemas.xmlsoap.org/soap/encoding/',
      'xmlns:xsd': 'http://www.w3.org/2001/XMLSchema',
      'xmlns:xsi': 'http://www.w3.org/2001/XMLSchema-instance'
    },
    'soapenv:Header': [
      ''
    ],
    'soapenv:Body': [
      {
        'ns5:loginResponse': [
          {
            '$': {
              'xmlns:ns5': ' /* Website sending me this response */ '
            },
            'ns5:id': [
              /*Sessionkey*/
            ],
            'ns5:rc': [
              '0'
            ]
          }
        ]
      }
    ]
  }
}

Что я уже пробовал:

console.dir(res["soapenv:Envelope"]["soapenv:Body"][0][0]['ns5:rc'])

console.dir(res["soapenv:Envelope"]["soapenv:Body"]["ns5:loginResponse"])["ns5:rc"]

... и куча других, которых я больше не знаю.

0
alyei 29 Авг 2017 в 15:06

3 ответа

Лучший ответ

Сделай один шаг за раз. Наличие двоеточий ни на что не должно влиять, ключи - это просто строки. Начните с просмотра того, что res["soapenv:Envelope"] дает вам. Для меня, в консоли, я могу получить к нему доступ просто отлично.

Я пробовал ["soapenv:Envelope"]["soapenv:Body"][0]["ns5:loginResponse"][0]["ns5:rc"] и это тоже сработало.

Если вы не можете получить доступ к объекту и его возврату из запроса, вполне возможно, что у вашего маршрутизатора есть специальные методы для res, которые вы должны использовать для доступа к нему.

0
TheCog 29 Авг 2017 в 12:12

Вероятно, было бы полезно, если бы вы запускали свой JSON через префиксатор, чтобы сделать его более читабельным.

Двоеточие ничего не значит, потому что они часть строки.

Вот что вам нужно, чтобы добраться до ns5:rc

res['soapenv:Envelope']['soapenv:Body'][0]['ns5:loginResponse'][0]['ns5:rc']
0
GusRuss89 29 Авг 2017 в 12:14

Возьмите его поэтапно, глядя на выход на каждом этапе

Помните, что существует смесь массивов и объектов, из-за которых у вас возникают трудности. Если выходные данные начинаются с {, это объект, поэтому следующей вещью, которую нужно добавить к вашей записи, должно быть имя свойства. Напротив, когда вывод начинается с [, это массив, поэтому следующей вещью, которую нужно добавить, должен быть номер, такой как [0], чтобы получить первый элемент.

res["soapenv:Envelope"]

{$: {…}, Soapenv: Заголовок: Array (1), soapenv: Body: Array (1)}

res["soapenv:Envelope"]["soapenv:Body"]

[ { ... } ]

res["soapenv:Envelope"]["soapenv:Body"][0]

{ns5: loginResponse: Array (1)}

res["soapenv:Envelope"]["soapenv:Body"][0]["ns5:loginResponse"]

[ { ... } ]

res["soapenv:Envelope"]["soapenv:Body"][0]["ns5:loginResponse"][0]

{$: {…}, Ns5: id: Array (0), ns5: rc: Array (1)}

res["soapenv:Envelope"]["soapenv:Body"][0]["ns5:loginResponse"][0]["$"]

{xmlns: ns5: "/ * Сайт отправляет мне этот ответ * /"}

res["soapenv:Envelope"]["soapenv:Body"][0]["ns5:loginResponse"][0]["$"]["xmlns:ns5"]

"/ * Сайт отправляет мне этот ответ * /"

0
Eureka 29 Авг 2017 в 12:29