[转] Boost解析JSON格式

本文转自 http://blog.csdn.net/yqmfly/article/details/6914590

解析Json的方法有很多,也有不少的第三方开源工具。这里仅介绍其中的一种,用Bosst解析。Boost库是一个可移植、提供源代码的C++库,作为标准库的后备,是C++标准化进程的发动机之一。 Boost库由C++标准委员会库工作组成员发起,其中有些内容有望成为下一代C++标准库内容。在C++社区中影响甚大,是不折不扣的“准”标准库。Boost由于其对跨平台的强调,对标准C++的强调,与编写平台无关。大部分boost库功能的使用只需包括相应头文件即可,少数(如正则表达式库,文件系统库等)需要链接库。但Boost中也有很多是实验性质的东西,在实际的开发中实用需要谨慎。

鉴于Boost的强大功能,就用Boost来解析Json格式,包括简单的及复杂的。

首先给出一个Json例子。

{ "people": [ { "firstName": "Brett", "lastName":"McLaughlin", "email": "aaaa" },   

{ "firstName": "Jason", "lastName":"Hunter", "email": "bbbb"},   

{ "firstName": "Elliotte", "lastName":"Harold", "email": "cccc" }   ]}

要解析Json,需要包括头文件。

#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/json_parser.hpp>
#include <boost/date_time.hpp>

还有

#include <string>
#include <vector>

#include <sstream.h>

using namespace boost::property_tree;
using namespace boost::gregorian;
using namespace boost;

接着,将上面这串Json赋给一个变量

string strJson ={ "people": [ { "firstName": "Brett", "lastName":"McLaughlin", "email": "aaaa" },  

{ "firstName": "Jason", "lastName":"Hunter", "email": "bbbb"},   

{ "firstName": "Elliotte", "lastName":"Harold", "email": "cccc" }   ]}

注:在C++中需要在“前面加入\进行转意。

接下来,给程序增加如下变量:

string stra,strc;
vector<string> vecStr;
ptree pt,p1,p2;
stringstream stream;

下面的程序是解析Json

stream << strJson;
    read_json<ptree>( stream, pt);
    p1 = pt.get_child("people");
    for (ptree::iterator it = p1.begin(); it != p1.end(); ++it)
    {
        p2 = it->second; //first为空
        stra = p2.get<string>("firstName");
        vecStr.push_back(stra);   
    }

这样,vecStr中就有三个值,Brett,Jason,Elliotte,Json解析完成。

对于下面这样的Json格式,

{ "programmers": [ { "firstName": "Brett", "lastName":"McLaughlin", "email": "aaaa" },   { "firstName": "Jason", "lastName":"Hunter", "email": "bbbb" },   { "firstName": "Elliotte", "lastName":"Harold", "email": "cccc" }  ],  "authors": [   { "firstName": "Isaac", "lastName": "Asimov", "genre": "science fiction" },   { "firstName": "Tad", "lastName": "Williams", "genre": "fantasy" },   { "firstName": "Frank", "lastName": "Peretti", "genre": "christian fiction" }   ],   "musicians": [   { "firstName": "Eric", "lastName": "Clapton", "instrument": "guitar" },   { "firstName": "Sergei", "lastName": "Rachmaninoff", "instrument": "piano" }   ] }

就需要对上面的这两句程序稍微改动下就行了。

p1 = pt.get_child("programmers");

stra = p2.get<string>("firstName");

对比一下,发现什么不同了吗?就是将参数稍微修改了一下。如果要得到musicians里面的firstName呢?就只要将p1 = pt.get_child("programmers");中的参数改成musicians;

如果Json里面嵌套了Json,则需要增加一个Ptree 变量pt3,pt4.使

p3 = p2.get_child("嵌套的值");

for (ptree::iterator ita = p3.begin(); ita != p3.end(); ++ita)
         {
             p4 = ita->second;
             strc = p4.get<string>("markerItemLink");            
         }

时间: 2024-12-31 03:59:46

[转] Boost解析JSON格式的相关文章

Boost解析json格式文本

Boost解析json格式文本 flyfish 2015-4-1 property_tree可以解析ini,xml,json,info等格式的文本 以下示例是解析json格式的文本 需要包含的头文件 #include <boost/property_tree/ptree.hpp> #include <boost/property_tree/json_parser.hpp> const std::string file_path="C:\\test.txt"; 生

Android上解析Json格式数据

package com.practice.json; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import android.app.Activity; import android.os.Bundle; import android.util.Log; public class JsonDemo extends Activity { /*http://www.hui

解析JSON格式数据

 别想一下造出大海,必须先由小河川开始. 本讲内容:解析JSON格式数据 1)比起XML,JSON的主要优势在于它的体积更小,在网络上传输的时候可以更省流量.但缺点在于,它的语义性较差,看起来不如XML直观. 2)解析JSON格式的数据有多种方式,常用的两种是:使用官方提供的JSONObject和谷歌的开源库GSON. 示例一:解析服务器返回的数据 一.JSONObject解析方式 步骤: 1.在服务器中定义一个JSONArray,并将服务器返回的数据传入到JSONArray对象中 2.循环

C#深入解析Json格式内容

继上一篇<浅谈C#手动解析Json格式内容>我又来分析加入了一些功能让 这个解析类更实用 本章节最会开放我最终制作成功的Anonymous.Json.dll这个解析库 需要的拿走~ 功能继上一篇增加了许多上一篇只是讲述了  解析的步骤但是 至于一些扩展的功能却没有涉及 本文将继续讲解 1.如何将json转换为一个类或者结构 甚至属性 2.如何将一个类或者结构甚至属性转换为json 就这两点就已经很头疼了 诶 废话不多说进入正题 上一篇一直有个很神秘的JsonObject没有讲解 现在先来揭开J

用GSON解析Json格式数据

GSON是谷歌提供的开源库,用来解析Json格式的数据,非常好用.如果要使用GSON的话,则要先下载gson-2.2.4.jar这个文件,如果是在Android项目中使用,则在Android项目的libs目录下添加这个文件即可:如果是在Java项目中,则把gson-2.2.4.jar先添加到当前项目的任意一个包中,然后右键点击这个jar包 -> 构建路径 -> 添加至构建路径.这样准备工作就做好了. (一)单条无嵌套Json数据的解析 比如有如下Json数据:{"name"

android学习二十三(解析json格式数据)

前面我们已经掌握了xml格式数据的解析方式,那么接下来我们学习下如何解析json格式的数据.比起xml,json的主要优势在于它体积更小,在网络上传输的时候可以更省流量.但缺点在于,它的语义性差,看起来不如xml直观. 开始之前,先在自己的电脑apache-tomcat-6.0.39\webapps\ROOT路径目录下新建一个get_data.json的文件,然后编辑这个文件,并加入如下json格式的内容: [{"id":"5","version"

jquery解析json格式数据的方法(对象、字符串)

相关函数 函数 描述 JSON.parse() 用于将一个 JSON 字符串转换为 JavaScript 对象. JSON.stringify() 用于将 JavaScript 值转换为 JSON 字符串. //data为字符串类型 则要将字符串类型转换成json数据类型 var jsondatas=eval("("+data+")"); 本文实例讲述了jquery解析json格式数据的方法.分享给大家供大家参考,具体如下: json数据是我们常用的一种小型的数据实

Delphi用QJSON解析JSON格式的数据

本来用superobject来解析JSON已经够用了,可惜这个东东不能在移动段使用,于是找到QJSON来处理. 这是一个国内高手写开源免费的东西,赞一个. 加入数据如下: {"message":"ok","status":"1","state":"3","data": [{"time":"2012-07-07 13:35:14"

C# 解析JSON格式数据

JSON简介 JSON(全称为JavaScript ObjectNotation) 是一种轻量级的数据交换格式.它是基于JavaScript语法标准的一个子集.JSON采用完全独立于语言的文本格式,可以很容易在各种网络.平台和程序之间传输.JSON的语法很简单,易于人阅读和编写,同时也易于机器解析和生成. JSON与XML的比较 ◆可读性 JSON和XML的可读性相比较而言,由于XML提供辅助的标签,更加适合人阅读和理解. ◆文件大小与传输 XML允许使用方便的标签,所以文件尺寸是要比JSON大