首页 > 代码库 > C++ Json 生成解析

C++ Json 生成解析

这是JsonCpp实例下载地址

参考地址1

参考地址2

遇到编译未通过,有个配置属性的 地址

解压后用vs打开makefiles文件夹,里面是jsoncpp和两个test的工程,jsoncpp如下红框中。

  编译jsoncpp项目,然后在程序目录的build文件夹下可以找到编译好的lib文件debug和release下的文件名不同,debug下是json_vc71_libmtd.lib,release下是json_vc71_libmt.lib

  想要在我们的项目中加入jsoncpp库也很简单,只要把jsoncpp的项目的.h文件和.lib文件加入到我们的项目中就可以了,注意引用目录,然后编译看看有没有错误。

-------------------------------------如果出现编译错误,请看这里,否则跳过虚线内容------------------------------------------

Debug模式下编译,应该是没有错误的,如果出现链接错误或者是找不到文件,请查看文件路径设置对不对。需要注意的是Release模式下编译,

有可能会出现fatal error C1083: 无法打开编译器生成的文件:“../../build/vs71/release/lib_json\json_writer.asm”: No such file or directory ,

我也出现了这个错误。后来在网上查找原因,好像是jsoncpp的项目编译设置的问题。需要在jsoncpp的项目设置中做如下修改:

----------------------------------------------------------------------------------------------------------------------------

  如下图为json解析过程。

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      }  
如上图中代码
void readJson() {    using namespace std;    std::string strValue = http://www.mamicode.com/"{\"name\":\"json\",\"array\":[{\"cpp\":\"jsoncpp\"},{\"java\":\"jsoninjava\"},{\"php\":\"support\"}]}";    Json::Reader reader;    Json::Value value;    if (reader.parse(strValue, value))    {           std::string out = value["name"].asString();        std::cout << out << std::endl;        const Json::Value arrayObj = value["array"];        for (unsigned int i = 0; i < arrayObj.size(); i++)        {               if (!arrayObj[i].isMember("cpp"))                 continue;            out = arrayObj[i]["cpp"].asString();            std::cout << out;            if (i != (arrayObj.size() - 1))                 std::cout << std::endl;        }       }   }
json的反序列化

 #include "json.h"

如下为序列化写Json对象

//假设有一个json对象如下:
{
"name": "json″, "array": [ { "cpp": "jsoncpp" }, { "java": "jsoninjava" }, { "php": "support" } ]}
void writeJson() {    using namespace std;    Json::Value root;    Json::Value arrayObj;    Json::Value item;    item["cpp"] = "jsoncpp";    item["java"] = "jsoninjava";    item["php"] = "support";    arrayObj.append(item);    root["name"] = "json";    root["array"] = arrayObj;    root.toStyledString();    std::string out = root.toStyledString();    std::cout << out << std::endl;}