C++ 解析Json

摘要:
“Code”:“msg”:“files”:if(reader.parse(str:upload_id=“UP000000”int Code=root[“Code”].asInt()):例如int:defaultValue否则。int file_size=root[“files”].size():ios:

参考文档:http://www.cppblog.com/wanghaiguang/archive/2013/12/26/205020.html

1. 从字符串解析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 
    }  

2. 从文件解析json

int ReadJsonFromFile(const char* filename)  
{  
    Json::Reader reader;// 解析json用Json::Reader   
    Json::Value root; // Json::Value是一种很重要的类型,可以代表任意类型。如int, string, object, arrayC++ 解析Json第1张         

    std::ifstream is;  
    is.open (filename, std::ios::binary );    
    if (reader.parse(is, root, FALSE))  
    {  
        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();  
        
        code = root.get("uploadid", "null").asString();// 访问节点,Return the member named key if it exist, defaultValue otherwise.    

        int file_size = root["files"].size();  // 得到"files"的数组个数  
        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(); 
                printf("type : %s, url : %s  ", type.c_str(), url.c_str());
            }  
        }  
    }  
    is.close();  

    return 0;  

3. 向文件中插入json

void WriteJsonData(const char* filename)
{
    Json::Reader reader;  
    Json::Value root; // Json::Value是一种很重要的类型,可以代表任意类型。如int, string, object, arrayC++ 解析Json第1张        

    std::ifstream is;  
    is.open (filename, std::ios::binary );    
    if (reader.parse(is, root))  
    {  
        Json::Value arrayObj;   // 构建对象  
        Json::Value new_item, new_item1;  
        new_item["date"] = "2011-11-11";  
        new_item1["time"] = "11:11:11";  
        arrayObj.append(new_item);  // 插入数组成员  
        arrayObj.append(new_item1); // 插入数组成员  
        int file_size = root["files"].size();  
        for(int i = 0; i < file_size; ++i)  
            root["files"][i]["exifs"] = arrayObj;   // 插入原json中 
        std::string out = root.toStyledString();  
        // 输出无格式json字符串  
        Json::FastWriter writer;  
        std::string strWrite = writer.write(root);
        std::ofstream ofs;
        ofs.open("test_write.json");
        ofs << strWrite;
        ofs.close();
    }  

    is.close();  
}

免责声明:文章转载自《C++ 解析Json》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇CCF/CSP-201403-4转:WaitForSingleObject()函数、WaitForMultipleObject()函数下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Unity ShaderForge插件的使用

window--->Shader forge New Shader:新建一个Shader文件 Load Shader:导入已有的Shader文件 PolyCount thread:PolyCount页面 Unity:Unity Forum的页面,有问题可以去里面提问。 Node Documentation:Shader Forge中的节点说明文档...

Oracle-11g-R2 于 Linux 上的 RAC 卸载

安装环境: SuSE Linux Enterprise Server 11 SP3 Oracle 11g 11.2.0.3   卸载步骤: 1.卸载 Database 软件(oracle,第一节点) (1).运行 $ORACLE_HOME/deinstall/deinstall 脚本。 (2).按照导航执行如下。 (2-1).Specify th...

Oracle RAC 全局等待事件 gc current block busy 和 gc cr multi block request 说明--转载(http://blog.csdn.net/tianlesoftware/article/details/7777511)

一.RAC 全局等待事件说明 在RAC环境中,和全局调整缓存相关的最常见的等待事件是global cache cr request,global cache busy和equeue。 当一个进程访问需要一个或者多个块时,Oracle会首先检查自己的Cache是否存在该块,如果发现没有,就会先通过global cache赋予这些块共享访问的权限,然后再访问...

CentOS7.6搭建redis4.0.1 cluster集群(带密码)

1. 操作系统信息: $ uname -a   Linux iZbp11d57wmumnwuihb2czZ 3.10.0-957.5.1.el7.x86_64 #1 SMP Fri Feb 1 14:54:57 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux $ cat /proc/version   Linux versi...

灵活、高效的云原生集群管理经验:用 K8s 管理 K8s

作者 | 淮右、临石 导读:单 K8s 集群为用户提供了 Namespace 级别的隔离能力,理论上支持不超过 5K Node、15W Pod。多 K8s 集群则解决了单集群的资源隔离、故障隔离难题,打破可支持节点数、Pod 数的限制,但与此同时也带来了集群管理复杂度的上升;尤其在专有云场景中,K8s 工程师不可能像在公有云中一样快速触达客户环境,运维成...

Extjs4——向TreeStore中加载数据

这里分别介绍使用JSON本地数据,JSP和XML向TreeStore中加载数据的实现方式 1.本地JSON数据: 注意txt文件中叶子节点一定要加上leaf:true的属性,否则文件会无限展开的 var tree = new Ext.tree.TreePanel({ store: new Ext.data.TreeStore({...