Я пытаюсь реализовать api для распознавания речи goi в своей программе. Для этого я использую функцию ниже для анализа файла json, отложенного с сервера google. Однако программа иногда работает хорошо, а иногда и не получает ошибку нарушения доступаПроблемы при анализе json-файла, поступающего с речевого сервера google
Код приведен ниже. Где проблема? все равно, чтобы проверить, является ли объект json истинным или нет перед его разбором?
function TGoogleSpeech.Convert(const stream: TStream): string;
var
ret: string;
js: TlkJSONobject;
begin
try
ret := FHttp.Post(FURL, stream);
js := TlkJSON.ParseText(ret) as TlkJSONobject;
try
Result := js.Field['hypotheses'].Child[0].Field['utterance'].Value;
finally
js.Free;
end;
except
Result := '';
end;
end;
Я использую the uLKJSOn library.
, если какие именно линии АВ происходит? Каков полный точный текст ошибки AV? Внедряйте ведение журнала, когда AV-сервер регистрирует его в файл вместе с полным ответом сервера. Вам нужно будет иметь воспроизводимые входные данные. Мое слепое предположение заключается в том, что 'js.Field ['гипотезы']. Child [0] .Field ['utterance']. Значение;' где-то посередине возвращает 'nil', потому что ваши данные не имеют этого поля. Разделите строку на одну точку на инструкцию и проверьте наличие нил. Затем посмотрите, какая строка генерирует AV. как 'var1: = js.Field ['гипотезы'];/next line/var2: = var1.Child [0];/next line/var3: = var2.Field [..]; var4: = ..' –
вы также можете попробовать другие json libs http://stackoverflow.com/questions/14864170, но я думаю, что у вас есть ответ сервера без полей, которые вы предполагаете, должны существовать. Они, я думаю, существуют только иногда, а иногда вы пытаетесь извлечь значения из nil. Просто догадаться –
@ user3057015 Я отредактировал ваш вопрос, добавив ссылку на используемую вами библиотеку JSON. В следующий раз, когда вы разместите вопрос, убедитесь, что вы описали все типы, которые вы используете в своем коде. –