参考文章 乐之者101
写此文章目的在于记录,使用时请尊重原著
采用系统编码,系统采用utf8字符集的话拼接起来字符串就是utf-8了
// BeiChenJson.h
#pragma once
#include "json.h"
#include "json_helper.h"
// 本类为将对象转换为Json格式
// @ 类名: BeiChenjson
// @ author: 杨星
// @ adddresss: yangxing2297@163.com
// @ Version: V1.0.0
// @ Time: 2016-11-8
class BeiChenJson
{
public:
BeiChenJson();
virtual ~BeiChenJson();
// 添加一个value为整数的键值对
void AddElementInt(const char * key, int value);
// 添加一个value为字符串的键值对
void AddElementStr(const char * key, const char * value);
// 返回拼接好的字符串
char * toStr(void){
json_tree_to_string(m_pRoot, &m_pText);
return m_pText;
}
// 添加一个数组
void AddArr(){ m_pArr = json_new_array(); }
// 添加数组元素
void AddElementArr(BeiChenJson * json)
{
json_insert_child(m_pArr, json->m_pRoot);
}
// 添加数组对应key值,数据结束
void AddArrEnd(const char * key)
{
json_insert_pair_into_object(m_pRoot, key, m_pArr);
}
private:
json_t * m_pRoot;
json_t * m_pKey;
json_t * m_pValue;
json_t* m_pArr;
char m_buf[1024]; // 此处内存可以申请小点;
char* m_pText;
};
类的实现:
// BeiChenJson.cpp
#include "BeiChenJson.h"
#include <string>
#include <stdio.h>
#include <stdlib.h>
BeiChenJson::BeiChenJson()
{
m_pRoot = json_new_object();
m_pKey = NULL;
m_pValue = NULL;
}
BeiChenJson::~BeiChenJson()
{
json_free_value(&m_pRoot);
}
// 添加一个value为整数的键值对
void BeiChenJson::AddElementInt(const char * key, int value)
{
m_pKey = json_new_string(key);
memset(m_buf, 0, 1024);
sprintf_s(m_buf, "%d", value);
m_pValue = json_new_number(m_buf);
json_insert_child(m_pKey, m_pValue);
json_insert_child(m_pRoot, m_pKey);
}
// 添加一个value为字符串的键值对
void BeiChenJson::AddElementStr(const char * key, const char * value)
{
m_pKey = json_new_string(key);
m_pValue = json_new_string(value);
json_insert_child(m_pKey, m_pValue);
json_insert_child(m_pRoot, m_pKey);
}
测试代码:
// main.cpp
#include <iostream>
#include <string>
#include "BeiChenJson.h"
int main(int argc, char *argv[])
{
BeiChenJson js1;
js1.AddElementInt("潘强强", 22);
BeiChenJson js2;
js2.AddElementStr("xu wei", "ni hao");
js2.AddElementInt("heng ji", 10);
BeiChenJson js3;
js3.AddElementStr("dd", "nini");
BeiChenJson js;
js.AddElementInt("xinglang", 1000);
js.AddArr();
js.AddElementArr(&js1);
js.AddElementArr(&js2);
BeiChenJson jsa[5];
for (int i = 0; i < 5; ++i)
{
jsa[i].AddElementInt("Code", 12);
js.AddElementArr(&jsa[i]);
}// for
js.AddElementArr(&js3);
js.AddArrEnd("数组测试列表");
printf("%s\n", js.toStr());
return 0;
}
执行后结果:
BeiChenJson类及测试代码均为 乐之者101 的源码,我只是复制下来在vs2013中编译一次,其中修改了一点兼容性问题;引用源码请尊重原著