一、JSON简介

JSON

一种轻量级的数据交换格式,易于阅读、编写、解析,全称为JavsScript ObjectNotation。

JSON由两种基本结构组成

①   名字/值 对的集合,可以理解为对象

②   值的组合, 可以理解为数组

示例

string strTemp =
"{ \"name\" : \"cuihao\" ," \
" \"age\" : 28 }"; string strRoot =
"{ \"key_string\" : \"value_string\", " \
" \"key_number\" : 28, " \
" \"key_boolean\" : false, " \
" \"key_double\" : 12.345, " \
" \"key_object\" : json_temp, " \
" \"key_array\" : [\"array_string1\", \"array_string2\", 12345]}";

二、JSONCPP

1.     JsonCPP简介

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

a)     Json::Value    可以表示里所有的类型,比如int,string,object,array等,其支持的类型可以参考Json:ValueType中的值。

b)     Json::Reader  将json文件流或字符串解析到Json::Value,主要函数有Parse。

c)     Json::Writer   与Json::Reader相反,将Json::Value转化成字符串流,注意它的两个子类:Json::FastWriter和Json::StyleWriter,分别输出不带格式的json和带格式的json。

d)     Json::Value::Members主要用于以STL风格解析JSON数组。看过源代码的人已知道,Members其实是typedefvector而已。

在VC中使用JSONCPP

下载源码后,进入D:\SourceSoftware\jsoncpp-src-0.5.0\jsoncpp-src-0.5.0\makefiles\vs71类似目录用VS打开.sln文件进行编译。

注意:

Debug下可以直接编译

Release下:将lib_json项目属性:配置属性—C/C++--输出文件:汇编输出选择【无列表】,应为为No List。

使用JSONCPP时,添加

头文件目录:D:\SourceSoftware\jsoncpp-src-0.5.0\jsoncpp-src-0.5.0\include

库目录:

Debug: D:\SourceSoftware\jsoncpp-src-0.5.0\jsoncpp-src-0.5.0\build\vs71\debug\lib_json

#pragma  commebt(lib, “json_vc71_libmtd.lib”) 对应/MDd

Release: D:\SourceSoftware\jsoncpp-src-0.5.0\jsoncpp-src-0.5.0\build\vs71\release\lib_json

#pragma  commebt(lib, “json_vc71_libmt.lib”)  对应/MT

三、上代码

#include "stdafx.h"
#include <iostream>
#include <string>
#include <json\json.h>
using namespace std; int _tmain(int argc, _TCHAR* argv[])
{ string strStudent = "{ \"name\" : \"cuishihao\", \"age\" : 28, \"major\" : \"cs\" }";
//char* strStudent = "{ \"name\" : \"cuishihao\", \"age\" : 28, \"major\" : \"cs\" }"; Json::Reader reader;
Json::Value value;
bool bRet = reader.parse(strStudent, value);
if (false == bRet)
{
cerr << endl << "read value error \n";
return -;
} cout << value["name"].asString()<<endl;
cout << value["age"].asInt()<<endl;
cout << value["major"].asString()<<endl; cout << endl; Json::Value json_temp;
json_temp["name"] = Json::Value("cuihao");
json_temp["age"] = Json::Value(); Json::Value root;
root["key_string"] = Json::Value("value_string");
root["key_number"] = Json::Value();
root["key_boolean"] = Json::Value(true);
root["key_double"] = Json::Value(12.345);
root["key_object"] = json_temp;
root["key_array"].append("array_string1");
root["key_array"].append("array_string2");
root["key_array"].append();
Json::ValueType type = root.type(); Json::Value arrValue = root["key_array"];
for (Json::Value::UInt i = ; i < arrValue.size(); ++ i)
{
if (arrValue[i].isString())
cout << arrValue[i].asString(); else if (arrValue[i].isInt())
cout << arrValue[i].asInt(); cout << endl;
} cout << endl << "----------------------------------- " <<endl; string strTemp =
"{ \"name\" : \"cuihao\" ," \
" \"age\" : 28 }"; string strRoot =
"{ \"key_string\" : \"value_string\", " \
" \"key_number\" : 28, " \
" \"key_boolean\" : false, " \
" \"key_double\" : 12.345, " \
" \"key_object\" : json_temp, " \
" \"key_array\" : [\"array_string1\", \"array_string2\", 12345]}"; Json::StyledWriter writer;
cout << endl << writer.write(root) << endl; cout << endl << "----------------------------"<<endl; Json::Value::Members members = root.getMemberNames(); for(Json::Value::Members::const_iterator iter = members.begin();
iter != members.end();
++ iter)
{
string strName = *iter; if (root[strName].isInt())
cout << root[strName].asInt(); else if (root[strName].isString())
cout << root[strName].asString(); else if (root[strName].isDouble())
cout << root[strName].asDouble(); else if(root[strName].isBool())
cout << root[strName].asBool(); else if(root[strName].isArray())
{
for(Json::Value::ArrayIndex i = ; i < root[strName].size(); ++ i)
{
if(root[strName][i].isInt())
cout << root[strName][i].asInt();
else if(root[strName][i].isString())
cout << root[strName][i].asString();
else
cout << "others"; cout << endl;
}
} else if (root[strName].isObject())
{
Json::Value::Members mbs = root[strName].getMemberNames();
for (Json::Value::Members::const_iterator iter2 = mbs.begin();
iter2 != mbs.end();
++ iter2)
{
string strName2 = *iter2;
if(root[strName][strName2].isInt())
cout << root[strName][strName2].asInt();
else if(root[strName][strName2].isString())
cout << root[strName][strName2].asString();
else
cout << "others"; cout << endl;
} //for
} //else if
else
cout << "others"; cout << endl;
} return ;
}

执行结果

【JSONCpp】简介及demo的更多相关文章

  1. Disruptor并发框架(一)简介&上手demo

    框架简介 Martin Fowler在自己网站上写了一篇LMAX架构的文章,在文章中他介绍了LMAX是一种新型零售金融交易平台,它能够以很低的延迟产生大量交易.这个系统是建立在JVM平台上,其核心是一 ...

  2. PyQt5简介及demo

    PyQt5说明 pyqt5是一套Python绑定Digia QT5应用的框架.它可用于Python 2和3.本教程使用Python 3.Qt库是最强大的GUI库之一.pyqt5的官方网站http:// ...

  3. 国外源码精品-Android-PullToRefresh 简介与DEMO导入

    转载地址:http://my.oschina.net/cuitongliang/blog/170708 (一)&&http://my.oschina.net/cuitongliang/ ...

  4. Flask简介,安装,demo,快速入门

    1.Flask简介 Flask是一个相对于Django而言轻量级的Web框架. 和Django大包大揽不同,Flask建立于一系列的开源软件包之上,这其中 最主要的是WSGI应用开发库Werkzeug ...

  5. JWT令牌简介及demo

    一.访问令牌的类型 二.JWT令牌 1.什么是JWT令牌 ​ JWT是JSON Web Token的缩写,即JSON Web令牌,是一种自包含令牌. JWT的使用场景: 一种情况是webapi,类似之 ...

  6. Odata简介和Demo

    转:http://www.cnblogs.com/shanyou/archive/2013/06/11/3131583.html 在SOA的世界中,最重要的一个概念就是契约(contract).在云计 ...

  7. bluebird-api简介及demo

    var Promise = require("bluebird"); var fs = require("fs"); //方法Promise化 var read ...

  8. 轻量级通信引擎StriveEngine —— C/S通信demo(附源码)

    前段时间,有几个研究ESFramework的朋友对我说,ESFramework有点庞大,对于他们目前的项目来说有点“杀鸡用牛刀”的意思,因为他们的项目不需要文件传送.不需要P2P.不存在好友关系.也不 ...

  9. 轻量级通信引擎StriveEngine —— C/S通信demo(2) —— 使用二进制协议 (附源码)

    在网络上,交互的双方基于TCP或UDP进行通信,通信协议的格式通常分为两类:文本消息.二进制消息. 文本协议相对简单,通常使用一个特殊的标记符作为一个消息的结束. 二进制协议,通常是由消息头(Head ...

随机推荐

  1. wireshark: there are no interfaces on which a capture can be done

    权限问题,简单的直接sudo就行. 更安全的做法是: # chmod 4755 /usr/bin/dumpcap dumpcap的所在目录可用whereis命令查看.

  2. lintcode 中等题:minimum window substring 最小子串覆盖

    题目 最小子串覆盖 给定一个字符串source和一个目标字符串target,在字符串source中找到包括所有目标字符串字母的子串. 样例 给出source = "ADOBECODEBANC ...

  3. SaaS系列介绍之十五: SaaS知识重用

    1 建立并积累自己的开发体系 遵行业界的规定又有自己的特色是我们所追求的目标.成功的软件公司都有丰富而可复用的代码组件,几行代码在单个系统里可能无足轻重,但一旦可在大量的系统中可重复使用那就是价值不菲 ...

  4. python 常用数据结构使用

    python 字典操作 http://www.cnblogs.com/kaituorensheng/archive/2013/01/24/2875456.html python 字典排序 http:/ ...

  5. :Hibernate逍遥游记-第16管理session和实现对话

    1. package mypack; public class Monkey{ private Long id; private String name; private int count; pri ...

  6. 谈Delphi中SSL协议的应用(好多相关文章)

    摘要:本文主要介绍如何在Delphi中使用SSL协议.一共分为七个部分:(1)SSL协议是什么?(2)Delphi中如何使用SSL协议?(3)SSL客户端编程实例.(4)SSL服务端编程实例.(5)S ...

  7. Android学习之-TextView的滑动效果

    textView中如何设置滚动条 在xml中定义: <TextView            android:layout_width="wrap_content"      ...

  8. Android LayoutInflater.inflate()的参数及其用法

    很多人在网上问LayoutInflater类的用法,以及inflate()方法参数的含义,现解释如下: inflate()的作用就是将一个用xml定义的布局文件查找出来,注意与findViewById ...

  9. PHP JSON 操作总结

    由于JSON可以在很多种程序语言中使用,所以我们可以用来做小型数据中转,如:PHP输出JSON字符串供JavaScript使用等.在PHP中可以使用 json_decode() 由一串规范的字符串解析 ...

  10. Vim的可视模式

    可视模式可以看到选中的字符串, 并对其进行操作 v:进入字符选择模式 V:进入行选择模式 ctrl-v(Window是ctrl-q):进入block选择模式 o:移动光标到选择的另一端 O:移动光标到 ...