首先去下载jsoncpp-master(https://github.com/open-source-parsers/jsoncpp),然后点击amalgamate.py生成需要的头文件和cpp文件:
CJsonOpc.h头文件:
#pragma once
#include "json/json.h"
#include "json/json-forwards.h"
class CJsonOpc
{
public :
CJsonOpc();
// 从字符串中解析json格式
int ParseJsonFromString(Json::Value &root);
// 从文本文件中解析json格式
int ParseJsonFromFile(const char* filename);
// 在json结构中插入json
int InsertJsonToJson(Json::Value &root);
// 输出json
int OutputJsonInfo(const Json::Value root);
};
//json文件内容:
//{
// "uploadid": "UP000000",
// "code" : "0",
// "msg" : "",
// "files" :
// [
// {
// "code": "0",
// "msg" : "",
// "filename" : "1D_16-35_1.jpg",
// "filesize" : "196690",
// "width" : "1024",
// "height" : "682",
// "images" :
// [
// {
// "url": "fmn061/20111118",
// "type" : "large",
// "width" : "720",
// "height" : "479"
// },
// {
// "url": "fmn061/20111118",
// "type" : "main",
// "width" : "200",
// "height" : "133"
// }
// ]
// }
// ]
//}
CJsonOpc.cpp文件:
#include "CJsonOpc.h"
#include <fstream>
CJsonOpc::CJsonOpc()
{
}
int CJsonOpc::ParseJsonFromString(Json::Value &root)
{
const char* str = "{\"uploadid\": \"UP000000\",\"code\": 100,\"msg\": \"\",\"files\": \"\"}";
Json::Reader reader;
//Json::Value root;
if (reader.parse(str, root)) // reader将Json字符串解析到root,root将包含Json里所有子元素
{
std::string upload_id = root["uploadid"].asString(); // 访问节点,upload_id = "UP000000"
int code = root["code"].asInt(); // 访问节点,code = 100
}
return 0;
}
int CJsonOpc::ParseJsonFromFile(const char* filename)
{
// 解析json用Json::Reader
Json::Reader reader;
// Json::Value是一种很重要的类型,可以代表任意类型。如int, string, object, array...
Json::Value root;
std::ifstream is;
is.open(filename, std::ios::binary);
if (reader.parse(is, root))
{
std::string code;
if (!root["files"].isNull()) // 访问节点,Access an object value by name, create a null member if it does not exist.
code = root["uploadid"].asString();
// 访问节点,Return the member named key if it exist, defaultValue otherwise.
code = root.get("uploadid", "null").asString();
// 得到"files"的数组个数
int file_size = root["files"].size();
// 遍历数组
for (int i = 0; i < file_size; ++i)
{
Json::Value val_image = root["files"][i]["images"];
int image_size = val_image.size();
for (int j = 0; j < image_size; ++j)
{
std::string type = val_image[j]["type"].asString();
std::string url = val_image[j]["url"].asString();
}
}
}
is.close();
return 0;
}
int CJsonOpc::InsertJsonToJson(Json::Value &root)
{
Json::Value arrayObj; // 构建对象
Json::Value new_item, new_item1;
new_item["date"] = "2011-12-28";
new_item1["time"] = "22:30:36";
arrayObj.append(new_item); // 插入数组成员
arrayObj.append(new_item1); // 插入数组成员
root["InsertJson"] = arrayObj;
//int file_size = root["files"].size();
//for (int i = 0; i < file_size; ++i)
// root["files"][i]["exifs"] = arrayObj; // 插入原json中
return 0;
}
int CJsonOpc::OutputJsonInfo(const Json::Value root)
{
// 转换为字符串(带格式)
std::string out = root.toStyledString();
// 输出无格式json字符串
Json::FastWriter writer;
std::string out2 = writer.write(root);
return 0;
}
main文件:
int main()
{
CJsonOpc *jsDoc = new CJsonOpc();
Json::Value val;
jsDoc->ParseJsonFromString(val);
jsDoc->InsertJsonToJson(val);
jsDoc->OutputJsonInfo(val);
return 0;
}