赞
踩
c++ json字符解析
sudo apt-get install libjsoncpp-dev
pkg-config --cflags --libs jsoncpp
-I/usr/include/jsoncpp -ljsoncpp
编译选项: -I/usr/include/jsoncpp
连接选项: -ljsoncpp
1_jsonCpp_解析字符串_增.删.改.查.保存.cc
#include <iostream> #include <fstream> #include <memory> #include <json/json.h> // 假设我们有一个JSON字符串或文件内容 std::string json_data = R"({ "name": "John Doe", "age": 30, "city": "New York", "hobbies": ["reading", "gaming"] })"; void parse_and_modify_json() { // 1.解析JSON字符串 Json::Value root; Json::CharReaderBuilder builder; std::unique_ptr<Json::CharReader> reader(builder.newCharReader()); JSONCPP_STRING err; bool parsingSuccessful = reader->parse(json_data.c_str(), json_data.c_str() + json_data.size(), &root, &err); if (!parsingSuccessful) { std::cout << "Failed to parse JSON: " << std::endl; return; } // 2.改: 修改JSON数据 root["name"] = "Jane Doe"; // 修改名字 root["age"] = 31; // 修改年龄 root["hobbies"][0] = "programming"; // 替换第一个爱好 // 添加新的键值对 root["job"] = "Software Engineer"; // 3.查 std::string name = root["name"].asString(); int age = root["age"].asInt(); std::cout << "Name: " << name << std::endl; std::cout << "Age: " << age << std::endl; // 4.转为string bool shouldUseOldWay = false; //使用旧版本的API if (shouldUseOldWay) { Json::FastWriter writer; const std::string json_file = writer.write(root); std::cout <<"old way ---\n"<< json_file << std::endl; } else { Json::StreamWriterBuilder builder; const std::string json_file = Json::writeString(builder, root); std::cout <<"new way ---\n"<< json_file << std::endl; } // 5.写入文件 std::ofstream outfile("output.json"); if (outfile.is_open()) { Json::StreamWriterBuilder builder; builder["commentStyle"] = "None"; builder["indentation"] = " "; // 增加缩进 std::unique_ptr<Json::StreamWriter> writer(builder.newStreamWriter()); writer->write(root, &outfile); } outfile.close(); } int main(void) { parse_and_modify_json(); return 0; }
SConstruct
## 模板1 import os env = Environment() env["PROGSUFFIX"] = ".out" # 可执行后缀.out env["CCFLAGS"] = " -g3 -O0 -Wall" # gdb 调试开关 env.MergeFlags( [ "!pkg-config --cflags --libs jsoncpp", ] ) src_list = [ "1_jsonCpp_解析字符串_增.删.改.查.保存.cc", ] for src in src_list: env.Program(Split(src))
scons
scons: Reading SConscript files …
scons: done reading SConscript files.
scons: Building targets …
g++ -o 1_jsonCpp_解析字符串_增.删.改.查.保存.o -c -g3 -O0 -Wall -I/usr/include/jsoncpp 1_jsonCpp_解析字符串_增.删.改.查.保存.cc
g++ -o 1_jsonCpp_解析字符串_增.删.改.查.保存.out 1_jsonCpp_解析字符串_增.删.改.查.保存.o -ljsoncpp
scons: done building targets.
./1_jsonCpp_解析字符串_增.删.改.查.保存.out
Name: Jane Doe
Age: 31
new way —
{
“age” : 31,
“city” : “New York”,
“hobbies” :
[
“programming”,
“gaming”
],
“job” : “Software Engineer”,
“name” : “Jane Doe”
}
建议使用gdb调试运行,查看代码流程.
2_jsonCpp_从文件读取.cc
可以git clone https://gitee.com/zero2200/3_cpp-practice.git,
vscode 打开代码, F5 gdb调试运行
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。