Vladddosss
@Vladddosss

Как распарсить данный объект вернувшийся в строковом формате JS?

Здравствуйте!

В документации Yandex Speechkit в конце показан ответ.
Он возвращается не в JSON, а как строка, но с объектами.

Вот пример ответа:

{
   "result": {
      "sessionUuid": {
         "uuid": "24935f24-2c1f62dc-8dd49006-********",
         "userRequestId": "f8d2h7m07t4i********"
      },
      "audioCursors": {
         "receivedDataMs": "7400",
         "resetTimeMs": "0",
         "partialTimeMs": "7400",
         "finalTimeMs": "7400",
         "finalIndex": "0",
         "eouTimeMs": "0"
      },
      "responseWallTimeMs": "189",
      "final": {
         "alternatives": [
            {
               "words": [
                  {
                     "text": "я",
                     "startTimeMs": "459",
                     "endTimeMs": "520"
                  },
                  {
                     "text": "яндекс",
                     "startTimeMs": "640",
                     "endTimeMs": "1060"
                  },
                  {
                     "text": "спичкит",
                     "startTimeMs": "1120",
                     "endTimeMs": "1959"
                  },
                  {
                     "text": "я",
                     "startTimeMs": "2480",
                     "endTimeMs": "2520"
                  },
                  {
                     "text": "могу",
                     "startTimeMs": "2580",
                     "endTimeMs": "2800"
                  },
                  {
                     "text": "превратить",
                     "startTimeMs": "2860",
                     "endTimeMs": "3360"
                  },
                  {
                     "text": "любой",
                     "startTimeMs": "3439",
                     "endTimeMs": "3709"
                  },
                  {
                     "text": "текст",
                     "startTimeMs": "3800",
                     "endTimeMs": "4140"
                  },
                  {
                     "text": "в",
                     "startTimeMs": "4200",
                     "endTimeMs": "4220"
                  },
                  {
                     "text": "речь",
                     "startTimeMs": "4279",
                     "endTimeMs": "4740"
                  },
                  {
                     "text": "теперь",
                     "startTimeMs": "5140",
                     "endTimeMs": "5759"
                  },
                  {
                     "text": "и",
                     "startTimeMs": "5859",
                     "endTimeMs": "5900"
                  },
                  {
                     "text": "вы",
                     "startTimeMs": "5980",
                     "endTimeMs": "6399"
                  },
                  {
                     "text": "можете",
                     "startTimeMs": "6660",
                     "endTimeMs": "7180"
                  }
               ],
               "text": "я яндекс спичкит я могу превратить любой текст в речь теперь и вы можете",
               "startTimeMs": "0",
               "endTimeMs": "7400",
               "confidence": 0,
               "languages": []
            }
         ],
         "channelTag": "0"
      },
      "channelTag": "0"
   }
}
{
   "result": {
      "sessionUuid": {
         "uuid": "24935f24-2c1f62dc-8dd49006-********",
         "userRequestId": "f8d2h7m07t4i********"
      },
      "audioCursors": {
         "receivedDataMs": "7400",
         "resetTimeMs": "0",
         "partialTimeMs": "7400",
         "finalTimeMs": "7400",
         "finalIndex": "0",
         "eouTimeMs": "0"
      },
      "responseWallTimeMs": "189",
      "finalRefinement": {
         "finalIndex": "0",
         "normalizedText": {
            "alternatives": [
               {
                  "words": [
                     {
                        "text": "я",
                        "startTimeMs": "459",
                        "endTimeMs": "520"
                     },
                     {
                        "text": "яндекс",
                        "startTimeMs": "640",
                        "endTimeMs": "1060"
                     },
                     {
                        "text": "спичкит",
                        "startTimeMs": "1120",
                        "endTimeMs": "1959"
                     },
                     {
                        "text": "я",
                        "startTimeMs": "2480",
                        "endTimeMs": "2520"
                     },
                     {
                        "text": "могу",
                        "startTimeMs": "2580",
                        "endTimeMs": "2800"
                     },
                     {
                        "text": "превратить",
                        "startTimeMs": "2860",
                        "endTimeMs": "3360"
                     },
                     {
                        "text": "любой",
                        "startTimeMs": "3439",
                        "endTimeMs": "3709"
                     },
                     {
                        "text": "текст",
                        "startTimeMs": "3800",
                        "endTimeMs": "4140"
                     },
                     {
                        "text": "в",
                        "startTimeMs": "4200",
                        "endTimeMs": "4220"
                     },
                     {
                        "text": "речь",
                        "startTimeMs": "4279",
                        "endTimeMs": "4740"
                     },
                     {
                        "text": "теперь",
                        "startTimeMs": "5140",
                        "endTimeMs": "5759"
                     },
                     {
                        "text": "и",
                        "startTimeMs": "5859",
                        "endTimeMs": "5900"
                     },
                     {
                        "text": "вы",
                        "startTimeMs": "5980",
                        "endTimeMs": "6399"
                     },
                     {
                        "text": "можете",
                        "startTimeMs": "6660",
                        "endTimeMs": "7180"
                     }
                  ],
                  "text": "Я яндекс спичкит я могу превратить любой текст в речь теперь и вы можете",
                  "startTimeMs": "0",
                  "endTimeMs": "7400",
                  "confidence": 0,
                  "languages": []
               }
            ],
            "channelTag": "0"
         }
      },
      "channelTag": "0"
   }
}
{
   "result": {
      "sessionUuid": {
         "uuid": "24935f24-2c1f62dc-8dd49006-********",
         "userRequestId": "f8d2h7m07t4i********"
      },
      "audioCursors": {
         "receivedDataMs": "7400",
         "resetTimeMs": "0",
         "partialTimeMs": "7400",
         "finalTimeMs": "7400",
         "finalIndex": "0",
         "eouTimeMs": "7400"
      },
      "responseWallTimeMs": "190",
      "eouUpdate": {
         "timeMs": "7400"
      },
      "channelTag": "0"
   }
}



Как его преобразовать в JSON?

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

Кто сталкивался с подобным? Почему они вообще такой ответ дают?

Заранее спасибо.
  • Вопрос задан
  • 142 просмотра
Решения вопроса 1
IvanU7n
@IvanU7n
nothing interesting here
а разве что-то типа
JSON.parse('[' + response.replaceAll("}\n{", "},\n{") + ']');

не помогает?
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
cyber-jet
@cyber-jet
JSON.parse(json);
Ответ написан
bingo347
@bingo347 Куратор тега JavaScript
Crazy on performance...
а он возвращается именно так, в раскрытом виде?

Просто есть очень похожая штука - jsonl, когда 1 json на строку и достаточно просто разделить ответ построчно.

Ну а если в таком виде, то явный паттерн завершения json - закрывающая скобка - это единственное что есть на строке
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы