Jsoncpp的使用

转载 2013年12月05日 20:43:29

原文链接 点击打开链接

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。 易于人阅读和编写。同时也易于机器解析和生成。 它基于JavaScript Programming Language,Standard ECMA-262 3rd Edition - December 1999的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。 这些特性使JSON成为理想的数据交换语言。

JSON建构于两种结构:

  • “名称/值”对的集合(A collection of name/value pairs)。不同的语言中,它被理解为对象(object),纪录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组 (associative array)。
  • 值的有序列表(An ordered list of values)。在大部分语言中,它被理解为数组(array)。

这些都是常见的数据结构。事实上大部分现代计算机语言都以某种形式支持它们。这使得一种数据格式在同样基于这些结构的编程语言之间交换成为可能。

JSON具有以下这些形式:

对象是一个无序的“‘名称/值’对”集合。一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号);“‘名称/值’ 对”之间使用“,”(逗号)分隔。

数组是值(value)的有序集合。一个数组以“[”(左中括号)开始,“]”(右中括号)结束。值之间使用“,”(逗号)分隔。

值(value)可以是双引号括起来的字符串(string)、数值(number)、truefalsenull、对象(object)或者数组(array)。这些结构可以嵌套。

字符串(string)是由双引号包围的任意数量Unicode字符的集合,使用反斜线转义。一个字符(character)即一个单独的字符串(character string)。

字符串(string)与C或者Java的字符串非常相似。

数值(number)也与C或者Java的数值非常相似。除去未曾使用的八进制与十六进制格式。除去一些编码细节。

空白可以加入到任何符号之间。 以下描述了完整的语言。

C++要使用JSON来解析数据,一般采用jsoncpp.

网站:http://sourceforge.net/projects/jsoncpp/

下载了之后,解压,然后打开\jsoncpp-src-0.5.0\jsoncpp-src-0.5.0\makefiles\vs71

下的工程文件,进行编译链接就可以得到一个静态链接库json.lib

要用jsoncpp只需要将这个lib文件拷贝到你的工程目录下,并将jsoncpp-src-0.5.0\jsoncpp-src-0.5.0\include\json

复制到工程目录下,然后将这些头文件加到工程中去就可以了。

例子:

{
"name" : "小楼一夜听春雨",
"age" : 27
}

#pragma comment(lib, "json_mtd.lib")
 
#include <fstream>
#include <cassert>
#include "json/json.h"
 
int main()
{
    ifstream ifs;
    ifs.open("testjson.json");
    assert(ifs.is_open());
 
    Json::Reader reader;
    Json::Value root;
    if (!reader.parse(ifs, root, false))
    {
        return -1;
    }
 
    std::string name = root["name"].asString();
    int age = root["age"].asInt();
 
    std::cout<<name<<std::endl;
    std::cout<<age<<std::endl;
 
    return 0;
}

[{"name" : "xiaoy", "age" :17} , {"name" : "xiaot", "age" : 20}]

#pragma comment(lib, "json_mtd.lib")
 
#include <fstream>
#include <cassert>
#include "json/json.h"
 
int main()
{
    ifstream ifs;
    ifs.open("testjson.json");
    assert(ifs.is_open());
 
    Json::Reader reader;
    Json::Value root;
    if (!reader.parse(ifs, root, false))
    {
        return -1;
    }
 
    std::string name;
    int age;
    int size = root.size();
    for (int i=0; i<size; ++i)
    {
        name = root[i]["name"].asString();
        age = root[i]["age"].asInt();
 
        std::cout<<name<<" "<<age<<std::endl;
    }
 
    return 0;
}

json写入:

#pragma comment(lib, "json_mtd.lib")
 
#include <fstream>
#include <cassert>
#include "json/json.h"
 
 
int main()
{
    Json::Value root;
    Json::FastWriter writer;
    Json::Value person;
 
    person["name"] = "hello world";
    person["age"] = 100;
    root.append(person);
 
    std::string json_file = writer.write(root);
 
 
    ofstream ofs;
    ofs.open("test1.json");
    assert(ofs.is_open());
    ofs<<json_file;
 
    return 0;
}

结果:[{"age":100,"name":"hello world"}]

json对数组的解析还支持STL的风格。即

Json::Value::Members member;//Members  这玩意就是vector<string>,typedef了而已
for (Json::Value::iterator itr = objArray.begin(); itr != objArray.end(); itr++)
{
    member = (*itr).getMemberNames();
    for (Json::Value::Members::iterator iter = member.begin(); iter != member.end(); iter++)
    {
        string str_temp = (*itr)[(*iter)].asString();
    }
}

此种风格与上面的类似,只是上面的只是取"text"节点,而后一种是输出所有节点。

相关文章推荐

qt4.8使用jsoncpp简单实例

  • 2017年10月12日 14:38
  • 57KB
  • 下载

jsoncpp的简单使用

  • 2016年06月14日 17:40
  • 903KB
  • 下载

VS2010中使用JSONCPP方法

下载jsoncpp后,按ReadMe文档的说法是要先安装的,但是安装比较麻烦。然而事实上,我们并不需要安装,就可以直接使用。 方法一:直接拷贝源文件。这个方法比较简单,但不推荐,因为不便于项目管理。...

JSONCPP使用-1

  • 2015年12月04日 11:24
  • 37KB
  • 下载

jsoncpp使用测试

  • 2012年12月12日 19:05
  • 42KB
  • 下载

Jsoncpp编程接口及使用方法简介

Jsoncpp编程接口 Jsoncpp是一个使用C++语言实现的面向对象的json库,以静态库的形式提供,使用非常简单。 Jsoncpp提供的接口中有3个核心类:Reader、Writer、Valu...

jsoncpp使用说明

  • 2013年10月29日 09:47
  • 211KB
  • 下载

jsoncpp类的封装,方便使用

  • 2015年12月19日 11:52
  • 6KB
  • 下载

jsonCpp使用介绍和优化

JsonCpp简介 JsonCpp主要包含三种类型的class:Value Reader Writer。jsoncpp中所有对象、类名都在namespace json中,包含json.h即可。 ...

Jsoncpp使用例子

  • 2017年01月24日 21:58
  • 829KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Jsoncpp的使用
举报原因:
原因补充:

(最多只允许输入30个字)