zoukankan      html  css  js  c++  java
  • Jsoncpp Compiler、Programming

    catalog

    1. C++ jsoncpp简介
    2. Jsoncpp的下载与编译
    3. Linux Jsoncpp的SDK编译 & 简单实例
    4. Windows Jsoncpp的SDK编译 & 简单实例 

    1. C++ jsoncpp简介

    jsoncpp是c++解析JSON串常用的解析库之一。其常用的类有

    1. Json::Value: jsoncpp中最基本、最重要的类,用于表示各种类型的对象,jsoncpp支持的对象类型可见Json::ValueType枚举值
    2. Json::Reader: 用于读取、将字符串转换为Json::Value对象
    3. Json::Writer: 一个纯虚类,并不能直接使用。在此我们使用Json::Writer的子类
        1) Json::FastWriter
        2) Json::StyledWriter
        3) Json::StyledStreamWriter 

    Jsoncpp中所有对象、类名都在namespace json中,包含json.h即可

    Relevant Link:

    http://blog.csdn.net/fengshuiyue/article/details/8724204

    2. Jsoncpp的下载与编译

    1. 从gitbub上下载源代码: https://codeload.github.com/open-source-parsers/jsoncpp/zip/master
    2. unzip master
    3. cd jsoncpp-master
    4. scons platform=linux-gcc
    //gcc版本是4.8的,上面的命令执行完后,会在./libs/linux-gcc-4.8目录下面生成库文件
    -rw-r--r-- 1 root root 1068476 Jun 29 14:51 libjson_linux-gcc-4.8_libmt.a
    -rwxr-xr-x 1 root root  588508 Jun 29 14:51 libjson_linux-gcc-4.8_libmt.so*
    /*
    .so需要随主程序下发到客户端机器上,并添加到客户端的include搜索路径中
    .a可以使用静态编译直接集成编译到主程序中
    */

    Relevant Link:

    https://github.com/open-source-parsers/jsoncpp

    3. Linux Jsoncpp的SDK编译 & 简单实例

    0x1: 反序列化Json对象字符串

    jscpp1.cpp

    #include <iostream>
    #include <string>
    #include "json/json.h"
     
    int main(void)
    {
        std::string strValue = "{"key1":"value1","array":[{"key2":"value2"},{"key2":"value3"},{"key2":"value4"}]}";
    
        Json::Reader reader;
        Json::Value value;
    
        if (reader.parse(strValue, value))
        {
            std::string out = value["key1"].asString();
            std::cout << out << std::endl;
            const Json::Value arrayObj = value["array"];
            for (int i = 0; i<arrayObj.size(); i++)
            {
                out = arrayObj[i]["key2"].asString();
                std::cout << out;
                if (i != arrayObj.size() - 1)
                    std::cout << std::endl;
            }
        }
        return 0;
    }

    编译链接

    g++ -o jsoncpp1 jscpp1.cpp -I/zhenghan/jsonCPP/jsoncpp-master/include /zhenghan/jsonCPP/jsoncpp-master/libs/linux-gcc-4.8/libjson_linux-gcc-4.8_libmt.a

    0x2: 序列化构建Json对象

    先构建一个Json对象,此Json对象中含有数组,然后把Json对象序列化成字符串
    jscpp2.cpp

    #include <iostream>
    #include <string>
    #include "json/json.h"
     
    int main(void)
    {
        Json::Value root;
        Json::Value arrayObj;
        Json::Value item;
    
        for (int i = 0; i < 10; i ++)
        {
            item["key"] = i;
            arrayObj.append(item);
        }
    
        root["key1"] = "value1";
        root["key2"] = "value2";
        root["array"] = arrayObj;
        //root.toStyledString();
        std::string out = root.toStyledString();
        std::cout << out << std::endl;
        return 0;
    }

    编译链接

    g++ -o jsoncpp2 jsoncpp2.cpp -I/zhenghan/jsonCPP/jsoncpp-master/include /zhenghan/jsonCPP/jsoncpp-master/libs/linux-gcc-4.8/libjson_linux-gcc-4.8_libmt.a

    Relevant Link:

    http://www.cnblogs.com/logicbaby/archive/2011/07/03/2096794.html
    http://www.cnblogs.com/xudong-bupt/p/3696329.html

    4. Windows Jsoncpp的SDK编译 & 简单实例

    0x1: 编译链接

    1. 下载jsoncpp
    2. 解压
    3. 打开jsoncpp-src -> makefiles -> msvc2010 -> jsoncpp.sln
    4. 分别选择debug/released模式
    5. 在"解决方案资源管理器"中右击lib_json,选择 -> 仅用于项目 -> 仅生成lib_json
    6. 再次右击lib_json,选择 -> 仅用于项目 -> 仅链接lib_json 
    7. 生成的.lib文件夹在.makefilesmsvc2010中

    最终生成windows下的.lib静态链接库文件

    0x2: 简单示例

    1. 在jsonCPP源代码文件夹中创建文件夹include、lib
    2. 在include中创建文件夹json,将jsoncpp-src -> include -> json 中的.h文件全部复制过来
    3. 在lib中创建文件夹debug和release,把上一步编译生成的.lib文件复制过来
    //新建一个windows console控制台项目
    4. 选择项目 -> 属性
    5. 选择配置属性 -> C/C++ -> 常规,右边的"附加包含目录",附加包含目录: D:study	oolsForVS2010jsonPPinclude
    6. 选择配置属性 -> C/C++ -> 代码生成,右边的"运行库",选择MTd
    7. 选择配置属性 -> 链接器 -> 常规,右边的"附加库目录",添加lib文件夹(静态链接库)路径
    8. 选择配置属性 -> 链接器 -> 输入,右边的"附加依赖项",添加lib文件
    9. 点击应用完成json配置
    //若项目需要发布时(即项目选择release)
    10. 配置属性 -> C/C++ -> 代码生成,右边的"运行库",选择MT
    11. 选择配置属性 -> 链接器 -> 常规,右边的"附加库目录",添加lib文件夹 
    12. 然后可以运行程序获得release版本程序

    main.cpp

    // AliHealthExamination.cpp : 定义控制台应用程序的入口点。
    //
    
    #include <fstream>  
    #include <iostream>
    #include <string>  
    #include "json/json.h"  
    using namespace std;  
      
    #pragma comment(lib,"lib_json")  
      
    void main()  
    {  
        ifstream ifs;  
        ifs.open("test.json", ios::out|ios::in);  
        if(!ifs.is_open())  
        {  
            cout<<"fail to open file."<<endl;  
            return;  
        }  
      
        Json::Reader reader;  
        Json::Value root;  
        if(!reader.parse(ifs, root))  
        {  
            cout<<"fail to parse."<<endl;  
            return;  
        }  
      
        string s_name;  
        int i_age;  
        for(int i=0; i<root.size(); ++i)  
        {  
            s_name = root[i]["name"].asString();  
            i_age = root[i]["age"].asInt();  
      
            cout<<"name:"<<s_name.c_str()<<", "<<"age:"<<i_age<<endl;  
        }  
           
    }  

    json文件与生成结果

    1. json文件:[{"name":"kanguolai","age":25},{"name":"kanguoqu","age":18}]
    2. 生成结果

    Relevant Link:

    http://blog.csdn.net/guowenyan001/article/details/10378195
    http://my.oschina.net/mjRao/blog/160672

    Copyright (c) 2015 LittleHann All rights reserved

  • 相关阅读:
    S5pv210 android VGA 1440*900 视频播放/3D 演示效果实拍视频
    毕业3年,工资从5k到20k的经历——真的还是假的啊?
    转载.WinCE6.0 Camera驱动整体结构
    半夜来认识一下S5PV210 的VBPDE和VFPDE
    微软的windows 8授权真的要这么贵?谁要?!
    基于S5PC100的FIMC的部分解释——一篇让我理解透彻2440和S5PV210 摄像头camera控制器的文章
    转.Buffer Management by the Camera Driver (Windows Embedded CE 6.0)
    微软?想干掉苹果,自己做平板,还想做手机,有优秀的合作伙伴诺基亚?简直是笑话,难怪鲍ceo 被评为最应该下台的CEO了
    魅族经过M8——》M9——》MX 已经走向国际?
    wince6.0 S5pv210 之Sate210 VGA 镜像1440*900@60HZ/1280*1024@70HZ分辨率测试镜像(南嵌电子科技作品)
  • 原文地址:https://www.cnblogs.com/LittleHann/p/4607535.html
Copyright © 2011-2022 走看看