linux c+ json库使用 遍历、打印

    科技2025-06-01  36

    JsonCpp主要的类和常见函数

    Json::Value 表示所有的类型,比如int,string,object,array等,即存储json的所有数据。假设实例类为rootJson::Reader 将json文件流或字符串解析到Json::Value对象中,使用parse成员函数。假设实例类为reader。 reader.parse()Json::Writer 与Json::Reader相反,将Json::Value转换成字符串流,其有两个子类Json::FastWriter和Json::StyleWriter分别输出不带格式的json和带格式的json将json对象以字符串的方式打印出来,用root.toStyledString().c_str()判断json对象中是否含有某个key值 root.isMember(“key”); 或value[“key”].isNull();判断json对象是否为空root.empty()判断json对象成员的个数 root.size();删除某个key值,root.removeMember(“name”);

    从字符串或文件流解析json

    int ParseJsonFromString() { const char* str = "{\"name\": \"喜庆\",\"语文\": 100,\"数学\": 90,\"英语\": 80}"; Json::Reader reader; Json::Value root; if (reader.parse(str, root)) // reader将Json字符串解析到root,root将包含Json里所有子元素 { printf("%s\n", root.toStyledString().c_str()); //将json字符串打印出来 } Json::Value newIterm; newIterm["历史"] = 88; root.append(newIterm); //将新的数据添加到原有数据中 /*加一个对象,结果应该是 { 语文,100, 数学,90, 英语,80, { 历史,88, } } */ return 0; } int ParseJsonFromStream() { std::ifstream ifs("./conf.json"); if(ifs.is_open()) { Json::Reader reader; Json::Value root; if(reader.parse(ifs,root)) { printf("%s\n", root.toStyledString().c_str()); //将json字符串打印 } } }

    遍历json对象

    int ParseJsonFromStream() { std::ifstream ifs("./conf.json"); if(ifs.is_open()) { Json::Reader reader; Json::Value root; if(reader.parse(ifs,root)) { Json::Value::Members mem = root.getMemberNames; Json::Value::Members::iterator it = mem.begin(), end = mem.end(); for(; it != end; it ++) { std::str = *it; root[str.c_str()].isString();//判断key值是否为string类型 root[str.c_str()].asString();//将key值对应的value值转换为string类型 root[str.c_str()].atInt();//将key值对应的value值转换为int类型 //isObject } } } }

    将字符串转为json对象

    void jsonWriteToFile(Json::Value &root) { Json::FastWriter writer; std::string str = writer.write(root); //将json转换成字符串 Json::StyleWriter styledWriter; std::string styledStr = styledWriter.write(root); std::ofstream ofs("a.json"); ofs << str; ofs.close(); }
    Processed: 0.014, SQL: 8