Json学习

Json学习
尝试自己写一些测试,发现非常容易出现段错误

Json介绍
Json是一种轻量级的数据交换格式(也叫数据序列化方式)。Json采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 Json 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。
上面所述特征:独立于编程语言。作用:用来储存、表示、传输交换数据。和xml很像。

使用json需要包含json.h这个头文件,如下:

Json::Value node;
Json::Reader reader;
Json::FastWriter writer;
std::string str = “{“name”:“yang”, “age”:10}”;
//反序列化
reader.parse(str, node);//反序列化,将字符串转化为json格式的数据
//序列化
std::string str1 = node[“name”].asString();//只能序列化json的object,不能带key值一起序列化。
std::string str1 = node.asString();//会出现段错误

str = node.toStyledString(); //序列化为带格式字符串,序列化整个接送对象

std::string str2 = writer.write(node);//序列化为不带格式的字符串

/*
注:toStyledString的序列化时带格式的字符换,如上面的str = node.toStyledString()输出的是:
{
“age” : 10,
“name” : “yang”
}
转化为字符字符串为:“{\n"age”:10, \n"name":“yang”\n}"
str2 = writer.write(node);序列化的字符串就不带格式,序列化的结果为:{“age”:10,“name”:“yang”}
而str1 = node[“name”].asString();输出不带格式的字符串,str1 = yang;
除了asString字符串格式的序列化,还有其他类型的序列化输出:
str1 = node[“name”].asInt(); //序列化为int类型
str1 = node[“name”].asFloat(); //序列化为浮点型
str1 = node[“name”].asUint64(); //序列化为uint64_t类型
str1 = node[“name”].asCString(); //序列化为const char *类型
str1 = node[“name”].asString(); //序列化为std::string 类型
等;
*/

所以对象序列化的目的:
1、把对象的字节序列永久保存在硬盘上(以某种储存方式使自定义对象持久化);
2、在网络上传送对象的二进制序列(将对象从一个地方传递到另一个地方);
3、使程序更具维护性
简单说就是使用前必须进行的操作

遍历打印测试
std::string jsonStr = ““name”:“yang”, “age”:20”;
Json::Reader reader;
Json::Value value;
reader.parse(jsonStr,value);
Json::Value::Members member = value.getMemberNames();
for(Json::Value::Members::iterator iter = member.begin(); iter != member.end(); ++iter)
{
//获得key
cout << (*iter) << endl;
//获取val
std::cout << value[*iter] << std::endl;
}
//打印得出
name
age

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值