Разобрать вложенный Json - PullRequest
       3

Разобрать вложенный Json

0 голосов
/ 08 января 2019

Я попытался проанализировать этот ответ Json, но кажется, что часть Json отправляется в каком-то другом формате, поэтому при попытке проанализировать поле "Pricing" в поле "PREVIOUS_CONFIRMED_RESERVATION_SESSION_ATTRIBUTE", которое находится в разделе "sessionAttributes", результат не определен хотя другие поля за пределами "sessionAttributes" доступны.

Это файл Json:

 {
"dialogState":"Fulfilled","intentName":"***","message":"Thank you....","messageFormat":"PlainText","responseCard":null,
    "sessionAttributes":{"PREVIOUS_CONFIRMED_RESERVATION_SESSION_ATTRIBUTE":
    "{\"ReservationType\":\"Main\",\"Pricing\":\"2000\",\"DP\":\"wedding\"}",


    "lastConfirmedReservation":"{\"ReservationType\":\"Shape\",\"Shape\":\"Round\"}"}
,"slotToElicit":null,
"slots":{"Shape":"Round"}
}

Это то, к чему я пытаюсь получить доступ после получения ответа Json:

await fetch(
      '****',
      {
        method: 'POST',
        headers: {
      //**** some headers
        },
        body: JSON.stringify({ inputText: clientMessage })
      }
    )
      .then(r => r.json())
      .then(r => {
          pricing = r.sessionAttributes.PREVIOUS_CONFIRMED_RESERVATION_SESSION_ATTRIBUTE.Pricing;
      });

Ответы [ 3 ]

0 голосов
/ 08 января 2019

Это потому, что ваше поле PREVIOUS_CONFIRMED_RESERVATION_SESSION_ATTRIBUTE является строкой, поэтому вы должны преобразовать его в JSON с помощью JSON.parse () , прежде чем получить доступ к Pricing.

pricing = JSON.parse(r.sessionAttributes.PREVIOUS_CONFIRMED_RESERVATION_SESSION_ATTRIBUTE).Pricing;
0 голосов
/ 09 января 2019

Вы должны проанализировать PREVIOUS_CONFIRMED_RESERVATION_SESSION_ATTRIBUTE в ответ

await fetch(
      '****',
      {
        method: 'POST',
        headers: {
      //**** some headers
        },
        body: JSON.stringify({ inputText: clientMessage })
      }
    )
      .then(r => r.json())
      .then(r => {
          const responseData =  JSON.parse(r.sessionAttributes.PREVIOUS_CONFIRMED_RESERVATION_SESSION_ATTRIBUTE)
          const pricing = responseData.Pricing;
      });
0 голосов
/ 08 января 2019

Ваш PREVIOUS_CONFIRMED_RESERVATION_SESSION_ATTRIBUTE является строкой JSON, поэтому вам нужно проанализировать ее снова:

const data = {
  "dialogState": "Fulfilled",
  "intentName": "***",
  "message": "Thank you....",
  "messageFormat": "PlainText",
  "responseCard": null,
  "sessionAttributes": {
    "PREVIOUS_CONFIRMED_RESERVATION_SESSION_ATTRIBUTE": "{\"ReservationType\":\"Main\",\"Pricing\":\"2000\",\"DP\":\"wedding\"}",


    "lastConfirmedReservation": "{\"ReservationType\":\"Shape\",\"Shape\":\"Round\"}"
  },
  "slotToElicit": null,
  "slots": {
    "Shape": "Round"
  }
};

console.log(JSON.parse(data.sessionAttributes.PREVIOUS_CONFIRMED_RESERVATION_SESSION_ATTRIBUTE).Pricing);

Тогда в вашем случае:

pricing = JSON.parse(r.sessionAttributes.PREVIOUS_CONFIRMED_RESERVATION_SESSION_ATTRIBUTE).Pricing;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...