Json学习三
来源:互联网 发布:win10网络设置关闭 编辑:程序博客网 时间:2024/06/09 18:22
1.解析(json字符串转为对象)
std::string strDataJson;
Json::Reader JReader;
Json::Value JObject;
if (!JReader.parse(strDataJson, JObject))
{
cerr << "parse json error." << endl;
return bSuccess;
}
2,读取
std::string strMsg = JRec["msg"].asString();
int nRetCode = JRec["ret"]..asInt();
Json::Value JList = JRec["data"]["list"];
int nSize = JList.size();
获取错误信息: JReader.getFormatedErrorMessages()
3,增加或修改
JRoot["stringdata"] = Json::Value("msg");
JRoot["intdata"] = Json::Value(10);
4,删除
JValue.removeMember("toberemove");
5,对象转为字符串
//输出无格式json字符串
Json::FastWriter fast_writer;
strJRecList = fast_writer.write(JRoot);
//格式化之后的json,有回车换行符
std::string strOut = JRoot.toStyledString();
6各种json子类型的使用
(1)json Object
- for (Json::ValueIterator iter=groups_config.begin(); iter!=groups_config.end();iter++) {
- Json::Value client_dict = (*iter)["clients"];
- string topic_recresult = (*iter)["topics"]["recresult"].asString();
- string topic_recreq = (*iter)["topics"]["recreq"].asString();
- string topic_input = (*iter)["topics"]["input"].asString();
- for (Json::ValueIterator client_iter=client_dict.begin(); client_iter != client_dict.end(); ++client_iter) {
- string cid = client_iter.key().asString();
- // FIXME: create a new customer configuration
- CustomerPtr c(new Customer);
- c->LoadFromJson(cid, (*client_iter), topic_recresult, topic_recreq, topic_input);
- customers[cid] = c;
- }
- }
2.使用jsoncpp读JSON文件
如何将lib库添加进VS工程中在此就不赘述了。先看第一个读文件的例
- // JSON文件
- {"address":[
- {"name":"eliteYang", "email":"elite_yang@163.com"},
- {"name":"AAA", "email":"aaa@163.com"},
- {"name":"BBB", "email":"bbb@163.com"}
- ]}
- /**
- * file : jsoncpp_test.cpp
- * author : eliteYang
- * email : elite_yang@163.com
- * blog : http://www.cppfasn.org
- * desc : json cpp test
- */
- #include <fstream>
- #include <string>
- #include "jsoncpp/json.h"
- int _tmain(int argc, _TCHAR* argv[])
- {
- std::ifstream ifs;
- ifs.open("test.json");
- Json::Reader reader;
- Json::Value root;
- if (!reader.parse(ifs, root, false))
- { return -1; }
- Json::Value add_value = root["address"];
- for (int i = 0; i < add_value.size(); ++i)
- {
- Json::Value temp_value = add_value[i];
- std::string strName = temp_value["name"].asString();
- std::string strMail = temp_value["email"].asString();
- std::cout << "name: " << strName << " email: " << strMail << std::endl;
- // use value array[index]
- //Json::Value temp_value = add_value[i];
- //std::string strName = add_value[i]["name"].asString();
- //std::string strMail = add_value[i]["email"].asString();
- //std::cout << "name: " << strName << " email: " << strMail << std::endl;
- }
- system("Pause");
- return 0;
- }
结果:
name: eliteYang email: elite_yang@163.comname: AAA email: aaa@163.comname: BBB email: bbb@163.com请按任意键继续. . .
跟我们文件中的数据完全一致。
3.使用JSON写入一块数据
我们继续使用上述文件,在中间加上一块数据。我们插入一个新的{"name": "append", "email": "append@163.com"}
- /**
- * file : jsoncpp_test.cpp
- * author : eliteYang
- * email : elite_yang@163.com
- * blog : http://www.cppfasn.org
- * desc : json cpp test
- */
- #include <fstream>
- #include <string>
- #include "jsoncpp/json.h"
- int _tmain(int argc, _TCHAR* argv[])
- {
- std::ifstream ifs;
- ifs.open("test.json");
- Json::Reader reader;
- Json::Value root;
- if (!reader.parse(ifs, root, false))
- { return -1; }
- Json::Value& add_value = root["address"];
- Json::Value append_value;
- append_value["name"] = "append";
- append_value["email"] = "append@163.com";
- add_value.append(append_value);
- for (int i = 0; i < add_value.size(); ++i)
- {
- Json::Value temp_value = add_value[i];
- std::string strName = temp_value["name"].asString();
- std::string strMail = temp_value["email"].asString();
- std::cout << "name: " << strName << " email: " << strMail << std::endl;
- }
- Json::FastWriter writer;
- std::string json_append_file = writer.write(root);
- std::ofstream ofs;
- ofs.open("test_append.json");
- ofs << json_append_file;
- system("Pause");
- return 0;
- }
结果:
name: eliteYang email: elite_yang@163.comname: AAA email: aaa@163.comname: BBB email: bbb@163.comname: append email: append@163.com请按任意键继续. . .
- // test_append.json
- {"address":[{"email":"elite_yang@163.com","name":"eliteYang"},{"email":"aaa@163.com","name":"AAA"},{"email":"bbb@163.com","name":"BBB"},{"email":"append@163.com","name":"append"}]}
- Json学习三
- Json学习(三):FastJson操作Json
- php【基础学习三】json
- android学习三:json的使用
- json学习之三:JSONArray的应用
- JSON学习笔记(三)- 数组
- JSON学习(三) --服务器端输出JSON格式数据
- JSON学习(三) --服务器端输出JSON格式数据
- ios学习笔记(三)-----json数据的解析
- JSON学习三——>网上项目验证(通过)
- Ajax学习三——返回json格式数据
- Struts学习笔记(三)Ajax +json+JQuery的综合使用
- [Android学习]JSON的三种解析方式
- java学习php(三)增删改查+json
- [Android学习]JSON的三种解析方式
- Spring Security学习记录(三) -- JSON Web Token实践(上)
- Spark SQL基础学习【三】以json的方式存储
- [Android学习]JSON的三种解析方式
- import别人的源代码由于版本问题报错解决
- 删除表中重复的数据Oracle
- HTTP文件上传协议的具体格式示例
- 《浅谈Objective-C》
- 关于内敛函数
- Json学习三
- java线程 状态模型
- COCOS2D-X Lua面向对象编程
- 判断某一点在直线的左右侧的算法
- MAVEN学习笔记
- Android - ProGuard简介
- http协议 文件上传 POST
- 静态网页如何实现动态交互?-JavaScript
- NOI03 逃学的小孩