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文件夹在.\makefiles\msvc2010中

最终生成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\toolsForVS2010\jsonPP\include
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

时间: 2024-07-31 14:29:55

Jsoncpp Compiler、Programming的相关文章

ITP3914 Programming

ITP3914 Programming Assignment (2019/20)Page 1Assignment Due Date and Time24 November 2019 (Sun) 11:55 p.m.Instructions to Students1. This assignment is weighted 40% of the overall Continuous Assessment of thismodule.2. This assignment is an individu

CentOS安装Lua boost JsonCpp

一.安装lua 1.先安装readline,使用命令  yum install readline-devel 2.下载lua-5.3.1.tar.gz,地址http://www.lua.org/download.html  解压tar -zxvf lua-5.3.1.tar.gz 切换到解压后目录 cd lua-5.3.1 编译make linux 安装make install 安装结束后,在命令行输入lua,进入lua编程环境即可. 二.安装boost yum install boost yu

Hadoop、Pig、Hive、NOSQL 学习资源收集

(一)hadoop 相关安装部署 1.hadoop在windows cygwin下的部署: http://lib.open-open.com/view/1333428291655 http://blog.csdn.net/ruby97/article/details/7423088 http://blog.csdn.net/savechina/article/details/5656937 2.hadoop 伪分布式安装: http://www.thegeekstuff.com/2012/02/

EEE101 C Programming

EEE101 C Programming and Software Engineering 1 – ASSESSMENT 4Assessment Number 4Contribution to Overall Marks 35%Issue Date 21/11/2019Submission Deadline 24/12/2019 at 17:00 (5pm)Assessment ObjectiveThis assessment aims at evaluating students’ abili

XJCO1711 Procedural Programming

University of Leeds School of ComputingProcedural Programming XJCO1711Semester 1, 2019-2020Coursework 3 80 Marks(40% of the total module marks) Submission DeadlineThis coursework must be uploaded to Minerva before 10am on Friday 20/12/2019Late Penalt

COMP2113 Programming technologies

COMP2113 Programming technologies [2019]Final Programming ProjectGeneral InstructionsIn this project, you will solve THREE dependent programming tasks and write a short READMEdocument which briefly introduces your code and logic in each task. We will

读刘未鹏老大《你应当如何学习C++(以及编程)》

标签(空格分隔): 三省吾身 原文地址:你应当如何学习C++(以及编程) 本人反思自己这些年在学校学得稀里糊涂半灌水.看到这篇文章,感觉收获不少.仿佛有指明自己道路的感觉,当然真正困难的还是坚持学习,多动手实践. 但是这篇文章确实对于纠结知识细节还是看抽象理论给出了指导意义.麻省理工大学的<计算机科学及编程导论>课程上,Eric Grimson开篇就说到这本课不仅教授如何编程让电脑做一些事情,而是面对问题的时候思考,如何用算法或机器语言来描述这个问题,然后让电脑来替我们解决这个问题.以下是原文

MSc in Robotics

MSc in RoboticsProgramming Methods for Robotics AssignmentIrene Moulitsas & Peter SherarCranfield UniversityHand in date: 17/01/20 (FT), 31/01/20 (PT), 2:00pm1. IntroductionIn this assignment you are asked to write and test some C++ code for performi

json库的编译方法和vs2010中导入第三方库的方法

一.去相应官网下载json.cpp文件 Jsoncpp下载:https://sourceforge.net/projects/jsoncpp/    版本为v0.5.0 最新版本在:https://github.com/open-source-parsers/jsoncpp 二.编译链接成库文件 1)解压下载的json包,得到jsoncpp-src-0.5.0文件,打开jsoncpp-src-0.5.0\makefiles\vs71\jsoncpp.sln 2)转换项目为vs2010格式,并将模