首页 > 代码库 > C++操作Json字符串
C++操作Json字符串
一、从字符串中读取JSON
a.cpp
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | #include <iostream> #include "json/json.h" using namespace std; int main() { //字符串 const char * str = "{\"praenomen\":\"Gaius\",\"nomen\":\"Julius\",\"cognomen\":\"Caezar\"," "\"born\":-100,\"died\":-44}" ; Json::Reader reader; Json::Value root; //从字符串中读取数据 if (reader.parse(str,root)) { string praenomen = root[ "praenomen" ].asString(); string nomen = root[ "nomen" ].asString(); string cognomen = root[ "cognomen" ].asString(); int born = root[ "born" ].asInt(); int died = root[ "died" ].asInt(); cout << praenomen + " " + nomen + " " + cognomen << " was born in year " << born << ", died in year " << died << endl; } return 0; } |
makefile文件
?
1 2 3 4 5 6 7 8 | LIB=-L /usr/local/lib/libjson/ -ljson_linux- gcc -4.4.7_libmt a: a.o g++ -o a -std=c++0x a.o $(LIB) a.o: a.cpp g++ -c a.cpp clean: rm -rf a.o a |
运行结果
二、从文件中读取JSON
PersonalInfo.json(一个存储了JSON格式字符串的文件)
?
1 2 3 4 5 6 7 8 9 10 11 12 | { "name" : "Tsybius" , "age" :23, "sex_is_male" : true , "partner" : { "partner_name" : "Galatea" , "partner_age" :21, "partner_sex_is_male" : false }, "achievement" :[ "ach1" , "ach2" , "ach3" ] } |
a.cpp
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | #include <iostream> #include <fstream> #include "json/json.h" using namespace std; int main() { Json::Reader reader; Json::Value root; //从文件中读取 ifstream is; is.open( "PersonalInfo.json" , ios::binary); if (reader.parse(is,root)) { //读取根节点信息 string name = root[ "name" ].asString(); int age = root[ "age" ].asInt(); bool sex_is_male = root[ "sex_is_male" ].asBool(); cout << "My name is " << name << endl; cout << "I‘m " << age << " years old" << endl; cout << "I‘m a " << (sex_is_male ? "man" : "woman" ) << endl; //读取子节点信息 string partner_name = root[ "partner" ][ "partner_name" ].asString(); int partner_age = root[ "partner" ][ "partner_age" ].asInt(); bool partner_sex_is_male = root[ "partner" ][ "partner_sex_is_male" ].asBool(); cout << "My partner‘s name is " << partner_name << endl; cout << (partner_sex_is_male ? "he" : "she" ) << " is " << partner_age << " years old" << endl; //读取数组信息 cout << "Here‘s my achievements:" << endl; for ( int i = 0; i < root[ "achievement" ].size(); i++) { string ach = root[ "achievement" ][i].asString(); cout << ach << ‘\t‘ ; } cout << endl; cout << "Reading Complete!" << endl; } is.close(); return 0; } |
makefile
?
1 2 3 4 5 6 7 8 | LIB=-L /usr/local/lib/libjson/ -ljson_linux- gcc -4.4.7_libmt a: a.o g++ -o a -std=c++0x a.o $(LIB) a.o: a.cpp g++ -c a.cpp clean: rm -rf a.o a |
运行结果
三、将信息保存为JSON格式
a.cpp
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | #include <iostream> #include <fstream> #include "json/json.h" using namespace std; int main() { //根节点 Json::Value root; //根节点属性 root[ "name" ] = Json::Value( "Tsybius" ); root[ "age" ] = Json::Value(23); root[ "sex_is_male" ] = Json::Value( true ); //子节点 Json::Value partner; //子节点属性 partner[ "partner_name" ] = Json::Value( "Galatea" ); partner[ "partner_age" ] = Json::Value(21); partner[ "partner_sex_is_male" ] = Json::Value( false ); //子节点挂到根节点上 root[ "partner" ] = Json::Value(partner); //数组形式 root[ "achievement" ].append( "ach1" ); root[ "achievement" ].append( "ach2" ); root[ "achievement" ].append( "ach3" ); //直接输出 cout << "FastWriter:" << endl; Json::FastWriter fw; cout << fw.write(root) << endl << endl; //缩进输出 cout << "StyledWriter:" << endl; Json::StyledWriter sw; cout << sw.write(root) << endl << endl; //输出到文件 ofstream os; os.open( "PersonalInfo" ); os << sw.write(root); os.close(); return 0; } |
makefile
?
1 2 3 4 5 6 7 8 | LIB=-L /usr/local/lib/libjson/ -ljson_linux- gcc -4.4.7_libmt a: a.o g++ -o a -std=c++0x a.o $(LIB) a.o: a.cpp g++ -c a.cpp clean: rm -rf a.o a |
运行结果
生成的文件PersonalInfo.json
?
1 2 3 4 5 6 7 8 9 10 11 | { "achievement" : [ "ach1" , "ach2" , "ach3" ], "age" : 23, "name" : "Tsybius" , "partner" : { "partner_age" : 21, "partner_name" : "Galatea" , "partner_sex_is_male" : false }, "sex_is_male" : true } |
END
C++操作Json字符串
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。