C++Json生成

参考文章   乐之者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中编译一次,其中修改了一点兼容性问题;引用源码请尊重原著

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值