void Json_Parser::read_print(rapidjson::Value &va_p,const char*keyname){ rapidjson::Value va; if (va_p.HasMember(keyname)) { va=va_p[keyname]; std::string name(keyname); if (va.IsBool()) { const bool flag=va.GetBool(); name+=":%d"; CCLOG(name.c_str(),flag); } else if (va.IsDouble()) { const double flag=va.GetDouble(); name+=":%f"; CCLOG(name.c_str(),flag); } else if (va.IsInt()) { const int flag=va.GetInt(); name+=":%d"; CCLOG(name.c_str(),flag); } else if (va.IsString()) { const std::string flag=va.GetString(); name+=":%s"; CCLOG(name.c_str(),flag.c_str()); } else if (va.IsNull()) { name+=":Null"; CCLOG(name.c_str()); } else if(va.IsObject()) { CCLOG("obj--------%s",keyname); auto it=va.MemberBegin(); for (;it!=va.MemberEnd();it++) { if (va.HasMember(it->name)) { read_print(va,it->name.GetString()); } } } else if(va.IsArray()) { CCLOG("array-------%s",keyname); for (int i=0; i<va.Size();i++) { read_print_for_array(va[i],i); } } } }
AST_stmt* readASTStmt(BufferedReader *reader) { uint8_t type = reader->readByte(); if (VERBOSITY("parsing") >= 2) printf("type = %d\n", type); if (type == 0) return NULL; uint8_t checkbyte = reader->readByte(); assert(checkbyte == 0xae); switch (type) { case AST_TYPE::Assign: return read_assign(reader); case AST_TYPE::AugAssign: return read_augassign(reader); case AST_TYPE::Break: return read_break(reader); case AST_TYPE::ClassDef: return read_classdef(reader); case AST_TYPE::Continue: return read_continue(reader); case AST_TYPE::Expr: return read_expr(reader); case AST_TYPE::For: return read_for(reader); case AST_TYPE::FunctionDef: return read_functiondef(reader); case AST_TYPE::Global: return read_global(reader); case AST_TYPE::If: return read_if(reader); case AST_TYPE::Import: return read_import(reader); case AST_TYPE::ImportFrom: return read_importfrom(reader); case AST_TYPE::Pass: return read_pass(reader); case AST_TYPE::Print: return read_print(reader); case AST_TYPE::Return: return read_return(reader); case AST_TYPE::While: return read_while(reader); case AST_TYPE::With: return read_with(reader); default: fprintf(stderr, "Unknown stmt node type (parser.cpp:" STRINGIFY(__LINE__) "): %d\n", type); exit(1); break; } }
void Json_Parser::read_print_for_array(rapidjson::Value &va,int i){ if (va.IsBool()) { const bool flag=va.GetBool(); CCLOG("%d:%d",i,flag); } else if (va.IsDouble()) { const double flag=va.GetDouble(); CCLOG("%d:%f",i,flag); } else if (va.IsInt()) { const int flag=va.GetInt(); CCLOG("%d:%d",i,flag); } else if (va.IsString()) { const std::string flag=va.GetString(); CCLOG("%d:%s",i,flag.c_str()); } else if (va.IsNull()) { CCLOG("%d:null",i); } else if(va.IsObject()) { CCLOG("obj----------%d",i); auto it=va.MemberBegin(); for (;it!=va.MemberEnd();it++) { if (va.HasMember(it->name)) { read_print(va,it->name.GetString()); } } } else if(va.IsArray()) { CCLOG("array-------%d",i); for (int i=0; i<va.Size();i++) { read_print_for_array(va[i],i); } } }
//打印系列 void Json_Parser::read_Jasoitoos(const char*filepath){ //创建文件 rapidjson::Document doc; //提取字符串 __String*str=__String::createWithContentsOfFile(filepath); //解析字符串(一级) doc.Parse<rapidjson::kParseDefaultFlags>(str->getCString()); if (doc.HasParseError()) { CCLOG("error:%u",doc.GetParseError()); return ; } CCASSERT(doc.IsObject(),"json is error"); auto it=doc.MemberBegin(); for (;it!=doc.MemberEnd();it++) { read_print(doc,it->name.GetString()); } }