jsoncpp

jsoncpp

目录

jsoncpp

jsoncpp简介:

jsoncpp官网:

json接口说明:

jsoncpp库安装:

Jsoncpp库测试:

编译(添加 -ljsoncpp 选项):

json语法基础介绍:

json介绍官网:http://www.json.org/json-zh.html

JSON 语法规则:

JSON书写格式:

JSON的值:

jsoncpp核心类:

jsoncpp 解析json:



jsoncpp简介:

解析json

jsoncpp官网:

json-cpp download | SourceForge.net

json接口说明:

JsonCpp - JSON data format manipulation library

jsoncpp库安装:

sudo apt-get install libjsoncpp-dev

Jsoncpp库测试:

#include 
#include 
#include 
#include 
#include 
#include 
#include 
using namespace std;
int main()
{
    Json::FastWriter Writer;
    Json::Value value;
    string str;
    //添加键值对
    value["data"] = "hello world";
    value["time"] = "2021.1.1";
    value["SN"] = 12345;
    str.clear();
    //json值对象转化为json字符串
    str = Writer.write(value);
    printf("json:%s\r\n",str.c_str());
    return 0;
}

编译(添加 -ljsoncpp 选项):

g++ -o simple simple.cpp -ljsoncpp

json语法基础介绍:

json介绍官网:
JSON

JSON 语法规则:

json对象通过{}标识。

对象中包含的数据,数据通过键值对表示,键是所属的名称,键(key)也称属性,

数据之间由逗号分隔。

中括号 [] 保存数组,数组是值的集合。

JSON数组:

数组 是值的有序的集合,同一种类型,[]标识,值之间用逗号隔开

JSON的值:

数字(整数或浮点数)

字符串(在双引号中)

逻辑值(true 或 false)

数组(在中括号中)

对象(在大括号中)

null

JSON书写格式:

JSON 名称/值对,JSON 数据的书写格式是: key : value 。键(key),通过双引号包含。

jsoncpp核心类:

Json::Value Value类是json的一个值对象,可以代表一个Json文档,也可以是键值对(key:value)中的value

Json::Writer   将Json文档转化为Json值对象,一个基类。但不能使用,而是使用FastWriter等子类。

Json::Reader 将Json值对象转化为Json文档

jsoncpp 解析json:

1.jsoncpp可以用如下判断对应值类型。

bool isNull () const nullValue  'null' value
bool isInt () const intValue  signed integer value
bool isDouble () const realValue  double value
bool isString () const stringValue  UTF-8 string value.
bool isArray () const arrayValue  array value (ordered list)
bool isObject () const objectValue  object value (collection of name/value pairs).(键值对集合,{ }类型)

2.解析遍历json

       分别对不同类型json的值处理

{
    "datas1" : [
        
            "name" ,
            "age"  ,
            "heigth" ,
            "weigth" 
    ],
    "datas2" : [
        1,2,3,4
    ],
    "datas3" : [
        [11,22,33]
    ],
    "datas4" : [
        {"11":11,"22": 22,"33":33}
    ],
    "total" : 123,
    "description" : "hello world",
    "status" : false,
    "double" : 123.123,
    "reserve": 
    {
        "data" : "wwweeeerrrrttreee",
        "len" : 12
    }
}
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#define  JSON_PATH "./test.json"
void ParseObject(Json::Value &value);
void ParseArray(Json::Value &value);
using namespace std;
int main()
{
    Json::FastWriter Writer;
    Json::Value value;
    Json::Reader reader;
    ifstream ifs;
	ifs.open(JSON_PATH,std::ifstream::in);
    if(!ifs.good())
    {
        return -1;
    }
    if(reader.parse(ifs,value))
    {
        ParseObject(value);
    }
    ifs.close();
    return 0;
}

void ParseObject(Json::Value &value)
{
    Json::Value::Members names = value.getMemberNames(); //获取名字集合
    Json::Value::Members child_names;
    Json::Value child_value;
    cout << "{" << endl;
    for(int i = 0 ; i < names.size(); i++ )
    {
        if(value[names[i]].isNull())
        {
            continue;
        }
        else if(value[names[i]].isBool()) //bool类型
        {
            cout << names[i] << ":" << value[names[i]].asString() << endl;
        }
        if(value[names[i]].isInt()) //整数
        {
            cout << names[i] << ":" << value[names[i]].asInt() << endl;
        }
        else if(value[names[i]].isDouble()) //双精度
        {
            cout << names[i] << ":" << value[names[i]].asDouble() << endl;
        }
        else if(value[names[i]].isString()) //字符串
        {
            cout << names[i] << ":" << value[names[i]].asString() << endl; 
        }
        else if(value[names[i]].isObject()) //对象
        {
            cout << names[i] << ":" ;
            cout << "{" << endl;
            ParseObject(value[names[i]]); 
            cout << "}"<< endl;
        }
        else if(value[names[i]].isArray())
        {   
            cout << names[i] << ":" ;
            ParseArray(value[names[i]]);
            
        }
        
        else
        {
            break;
        }
                    
    }
    cout << "}"<< endl; 
    return;  
}
void ParseArray(Json::Value &value)
{
    if(value.isArray()) // 数组 有序的集合,同一种类型
    {                                   //值是对象 ,数组 ,键/对象
        cout << "[" <

运行结果:

{
datas1:[
name
,age
,heigth
,weigth
,]
datas2:[
1
,2
,3
,4
,]
datas3:[
[
11
,22
,33
,]
,]
datas4:[
{
11:11
22:22
33:33
}
,]
description:hello world
double:123.123
reserve:{
{
data:wwweeeerrrrttreee
len:12
}
}
status:false
}

你可能感兴趣的:(数据表示,json)