c结构体赋值的另类操作 附带另类json解析的函数
typedef struct { int floor; //0 1 2 3 4 5.... int type; //0 : 1 , 2 { 3 } 4 [ 5 ] int pos;// }StructJsonParseMiddle; //事件码和故障码对应的结构体 void JsonParseFloor(QString data,QMap<QString, QString> &map,int floor=1){ int currentFloor = 0; QList<StructJsonParseMiddle> list; for(int i=0;i<data.length();i++){ if(false){} else if(':'==data.at(i)){ list.append({currentFloor,0,i}); } else if(','==data.at(i)){ list.append({currentFloor,1,i}); } else if('{'==data.at(i)){ currentFloor+=1;list.append({currentFloor,2,i}); } else if('['==data.at(i)){ currentFloor+=1;list.append({currentFloor,4,i}); } else if('}'==data.at(i)){ list.append({currentFloor,3,i});currentFloor-=1; } else if(']'==data.at(i)){ list.append({currentFloor,5,i});currentFloor-=1; } } int beginpos = 0; QString key = ""; for(auto line:list){ //myDebugMsg(QString("floor:%1 type:%2 pos:%3").arg(line.floor).arg(line.type).arg(line.pos)); if(line.type==2 && line.floor==floor){beginpos=line.pos+1; } if(line.type==0 && line.floor==floor){ key = data.mid(beginpos,line.pos-beginpos); beginpos=line.pos+1; } if(line.type==1 && line.floor==floor){ map[key]=data.mid(beginpos,line.pos-beginpos); beginpos=line.pos+1; } if(line.type==3 && line.floor==floor){ map[key]=data.mid(beginpos,line.pos-beginpos); beginpos=line.pos+1; } } } void JsonParseArray(QString data, QStringList &res, int floor=1) { int currentFloor = 0; QList<StructJsonParseMiddle> list; for(int i=0;i<data.length();i++){ if(false){} else if(':'==data.at(i)){ list.append({currentFloor,0,i}); } else if(','==data.at(i)){ list.append({currentFloor,1,i}); } else if('{'==data.at(i)){ currentFloor+=1;list.append({currentFloor,2,i}); } else if('['==data.at(i)){ currentFloor+=1;list.append({currentFloor,4,i}); } else if('}'==data.at(i)){ list.append({currentFloor,3,i});currentFloor-=1; } else if(']'==data.at(i)){ list.append({currentFloor,5,i});currentFloor-=1; } } int beginpos = 0; QString key = ""; int flag = 0;//标记是数组还是kv for(auto line:list){ if(line.floor==floor){ if(line.type==2) flag = 2; else if(line.type==4) flag = 4; break; } } if(flag==2){ for(auto line:list){ if(line.type==2 && line.floor==floor){beginpos=line.pos+1; } if(line.type==0 && line.floor==floor){ key = data.mid(beginpos,line.pos-beginpos); beginpos=line.pos+1; } if(line.type==1 && line.floor==floor){ res.append(QString("%1:%2").arg(key).arg(data.mid(beginpos,line.pos-beginpos))); beginpos=line.pos+1; } if(line.type==3 && line.floor==floor){ res.append(QString("%1:%2").arg(key).arg(data.mid(beginpos,line.pos-beginpos))); beginpos=line.pos+1; } } } else if(flag==4){ for(auto line:list){ if(line.type==4 && line.floor==floor){beginpos=line.pos+1; } if(line.type==1 && line.floor==floor){ res.append(data.mid(beginpos,line.pos-beginpos)); beginpos=line.pos+1; } if(line.type==5 && line.floor==floor){ res.append(data.mid(beginpos,line.pos-beginpos)); beginpos=line.pos+1; } } } }
附带另类json解析的函数
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 张高兴的大模型开发实战:(一)使用 Selenium 进行网页爬虫
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构