bool KsCardMsg::ParseMsg(const std::string &msg) { Json::Value root; Json::Reader reader; msgtype_=""; msg_field_.clear(); if(!reader.parse(msg,root)) { wxLogError(wxT("数据格式错误")); return false; } std::string value; value = root.get("msgtype","None").asString(); msgtype_ = value; if(msgtype_.length() == 0) { wxLogError(wxT("数据格式错误,没有消息类型")); return false; } parseLevel_ = 0; bool rc = parseJsonData("",root); if(!rc) msg_field_.clear(); return rc; }
bool KsCardMsg::parseJsonData(const std::string& rootname,Json::Value &root) { size_t i; Json::Value::Members mbs = root.getMemberNames(); ++parseLevel_; if(parseLevel_>2) return false; for(i = 0;i < mbs.size(); ++i) { Json::Value& clt = root[mbs[i]]; std::string fullname = rootname; if(rootname.length() > 0) fullname += "."; fullname += mbs[i]; if(clt.isArray() || clt.isObject()) { if(!parseJsonData(fullname,clt)) return false; } else { msg_field_.insert(PARA_MAP_TYPE::value_type(fullname,root.get(mbs[i],"").asString())); } } return true; }
void SocketIOClient::monitor() { *databuffer = 0; if (!client.connected()) { Serial.println("Connecting..."); if (!connect(ID, hostname, port)){ Serial.println("Connection Failed."); delay(1000); return; } } if (!client.available()) return; char which; while (client.available()) { readmsg(); dataptr = databuffer; switch (databuffer[0]) { case '1': // connect: [] which = 6; break; case '2': // heartbeat: [2::] client.print((char)0); client.print("2::"); client.print((char)255); continue; case '5': // event: [5:::{"name":"ls"}] which = 3; break; default: if (debug) { Serial.print("Drop "); Serial.println(dataptr); } continue; } findColon(which); dataptr += 1; // handle backslash-delimited escapes char *optr = databuffer; /* while (*dataptr && (*dataptr != '"')) { if (*dataptr == '\\') { ++dataptr; // todo: this just handles "; handle \r, \n, \t, \xdd } *optr++ = *dataptr++; }*/ while (*dataptr) { if (*dataptr == '\\') { // Do not remove escapes for json parsing //Serial.println("\\"); //++dataptr; // todo: this just handles "; handle \r, \n, \t, \xdd } *optr++ = *dataptr++; } *optr = 0; if (debug) { Serial.print("["); Serial.print(databuffer); Serial.println("]"); } parseJsonData(databuffer); } }