码迷,mamicode.com
首页 > 编程语言 > 详细

C++ Json 生成解析

时间:2014-07-10 15:38:45      阅读:475      评论:0      收藏:0      [点我收藏+]

标签:des   style   blog   http   java   color   

这是JsonCpp实例下载地址

参考地址1

参考地址2

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

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

bubuko.com,布布扣

  编译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的项目设置中做如下修改:

bubuko.com,布布扣

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

  如下图为json解析过程。

bubuko.com,布布扣

bubuko.com,布布扣
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  
    }  
如上图中代码
bubuko.com,布布扣
void readJson() {
    using namespace std;
    std::string strValue = "{\"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;
}

 

 

 

 

 

 

 

 

 

 

C++ Json 生成解析,布布扣,bubuko.com

C++ Json 生成解析

标签:des   style   blog   http   java   color   

原文地址:http://www.cnblogs.com/bkycjj/p/3830884.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!