in nlsCppSdk/framework/common/nlsEvent.cpp [193:371]
int NlsEvent::parseJsonMsg(bool ignore) {
if (_msg.empty()) {
return -(NlsEventMsgEmpty);
}
try {
Json::Reader reader;
Json::Value head(Json::objectValue);
Json::Value payload(Json::objectValue);
Json::Value root(Json::objectValue);
Json::Value stashResult(Json::objectValue);
if (!reader.parse(_msg, root)) {
LOG_ERROR("_msg:%s", _msg.c_str());
return -(JsonParseFailed);
}
// parse head
if (!root["header"].isNull() && root["header"].isObject()) {
head = root["header"];
// name
if (!head["name"].isNull() && head["name"].isString()) {
std::string name = head["name"].asCString();
int retCode = parseMsgType(name);
if (retCode < 0) {
if (ignore == false) {
if (retCode == -(InvalidNlsEventMsgType)) {
LOG_ERROR("Event Msg Type is invalid: %s", _msg.c_str());
return retCode;
}
}
}
}
// status
if (!head["status"].isNull() && head["status"].isInt()) {
_statusCode = head["status"].asInt();
} else {
if (ignore == false) {
return -(InvalidNlsEventMsgStatusCode);
}
}
// task_id
if (!head["task_id"].isNull() && head["task_id"].isString()) {
_taskId = head["task_id"].asCString();
}
} else {
if (!root["channelClosed"].isNull()) {
_msgType = Close;
} else if (!root["TaskFailed"].isNull()) {
_msgType = TaskFailed;
} else {
if (ignore == false) {
return -(InvalidNlsEventMsgHeader);
}
}
}
// parse payload
if (_msgType != SynthesisCompleted && _msgType != MetaInfo) {
if (!root["payload"].isNull() && root["payload"].isObject()) {
payload = root["payload"];
// result
if (!payload["result"].isNull() && payload["result"].isString()) {
_result = payload["result"].asCString();
}
// index
if (!payload["index"].isNull() && payload["index"].isInt()) {
_sentenceIndex = payload["index"].asInt();
}
// time
if (!payload["time"].isNull() && payload["time"].isInt()) {
_sentenceTime = payload["time"].asInt();
}
// begin_time
if (!payload["begin_time"].isNull() && payload["begin_time"].isInt()) {
_sentenceBeginTime = payload["begin_time"].asInt();
}
// confidence
if (!payload["confidence"].isNull() &&
payload["confidence"].isDouble()) {
_sentenceConfidence = payload["confidence"].asDouble();
}
// display_text
if (!payload["display_text"].isNull() &&
payload["display_text"].isString()) {
_displayText = payload["display_text"].asCString();
}
// spoken_text
if (!payload["spoken_text"].isNull() &&
payload["spoken_text"].isString()) {
_spokenText = payload["spoken_text"].asCString();
}
// sentence timeOut status
if (!payload["status"].isNull() && payload["status"].isInt()) {
_sentenceTimeOutStatus = payload["status"].asInt();
}
// example: "words":[{"text":"一二三四","startTime":810,"endTime":2460}]
if (!payload["words"].isNull() && payload["words"].isArray()) {
Json::Value wordArray = payload["words"];
int iSize = wordArray.size();
WordInfomation wordInfo;
for (int nIndex = 0; nIndex < iSize; nIndex++) {
if (wordArray[nIndex].isMember("text") &&
wordArray[nIndex]["text"].isString()) {
wordInfo.text = wordArray[nIndex]["text"].asCString();
}
if (wordArray[nIndex].isMember("startTime") &&
wordArray[nIndex]["startTime"].isInt()) {
wordInfo.startTime = wordArray[nIndex]["startTime"].asInt();
}
if (wordArray[nIndex].isMember("endTime") &&
wordArray[nIndex]["endTime"].isInt()) {
wordInfo.endTime = wordArray[nIndex]["endTime"].asInt();
}
// LOG_DEBUG("List Push: %s %d %d",
// wordInfo.text.c_str(), wordInfo.startTime, wordInfo.endTime);
_sentenceWordsList.push_back(wordInfo);
} // for
}
// WakeWordVerificationCompleted
if (_msgType == NlsEvent::WakeWordVerificationCompleted) {
if (!payload["accepted"].isNull() && payload["accepted"].isBool()) {
_wakeWordAccepted = payload["accepted"].asBool();
}
if (!payload["known"].isNull() && payload["known"].isBool()) {
_wakeWordKnown = payload["known"].asBool();
}
if (!payload["user_id"].isNull() && payload["user_id"].isString()) {
_wakeWordUserId = payload["user_id"].asCString();
}
if (!payload["gender"].isNull() && payload["gender"].isInt()) {
_wakeWordGender = payload["gender"].asInt();
}
}
// stashResult
if (_msgType == NlsEvent::SentenceEnd) {
if (!payload["stash_result"].isNull() &&
payload["stash_result"].isObject()) {
stashResult = payload["stash_result"];
if (!stashResult["sentenceId"].isNull() &&
stashResult["sentenceId"].isInt()) {
_stashResultSentenceId = stashResult["sentenceId"].asInt();
}
if (!stashResult["beginTime"].isNull() &&
stashResult["beginTime"].isInt()) {
_stashResultBeginTime = stashResult["beginTime"].asInt();
}
if (!stashResult["currentTime"].isNull() &&
stashResult["currentTime"].isInt()) {
_stashResultCurrentTime = stashResult["currentTime"].asInt();
}
if (!stashResult["text"].isNull() &&
stashResult["text"].isString()) {
_stashResultText = stashResult["text"].asCString();
}
}
}
}
}
} catch (const std::exception& e) {
LOG_ERROR("Json failed: %s", e.what());
return -(JsonParseFailed);
}
return Success;
}