知道了怎么处理字符串形式的json数据,下面看看将json数据写入文本以及从文本中读入进行处理。
源码地址:
https://github.com/jeremy505/jasoncpp-examples/blob/master/write_to_file.cpp
https://github.com/jeremy505/jasoncpp-examples/blob/master/read_from_file.cpp
https://github.com/jeremy505/jasoncpp-examples/blob/master/file_string_parse.cpp
先看看将json数据写入文本:(write_to_file.cpp)
#include <iostream>
#include <fstream>
#include "json/json.h"
using namespace std;
int main(void)
Json::Value root_group;
root_group["Personal-details"][0]["Age"] = 20;
root_group["Personal-details"][0]["Name"] = "jeremy";
root_group["Personal-details"][0]["Live-City"] = "Shanghai";
root_group["Personal-details"][0]["Phone-Number"]["1"] = "123456789";
root_group["Personal-details"][0]["Phone-Number"]["2"] = "987654321";
root_group["Personal-details"][0]["Index"] = 1;
root_group["Personal-details"][1]["Age"] = 23;
root_group["Personal-details"][1]["Name"] = "Eva";
root_group["Personal-details"][1]["Live-City"] = "Wuhan";
root_group["Personal-details"][1]["Phone-Number"]["1"] = "222222222";
root_group["Personal-details"][1]["Phone-Number"]["2"] = "111111111";
root_group["Personal-details"][1]["Index"] = 2;
fstream f;
if( !f.is_open())
cout << "Open file error!" << endl;
f << root_group.toStyledString();
f.open("Personal-details.json", ios::out);
程序会在当前目录下创建Personal-details.json文本,内容就是我们写入的json格式数据:
下面从Personal-details.json文本读取数据并解析(read_from_file.cpp):
#include <iostream>
#include <fstream>
#include <string>
#include "json/json.h"
using namespace std;
int main(void)
Json::CharReaderBuilder rbuilder;
rbuilder["collectComments"] = false;
Json::Value root_group;
JSONCPP_STRING errs;
fstream f;
f.open("Personal-details.json", ios::in);
if(!f.is_open())
cout << "Open json file error!" << endl;
bool parse_ok = Json::parseFromStream(rbuilder, f, &root_group, &errs);
if(!parse_ok)
cout << "Parse json file error!" << endl;
cout << "Printf jeremy's information:" << endl;
cout << root_group.toStyledString() << endl;
cout << "Personal-details:Name=" << root_group["Personal-details"][0]["Name"]<< endl;
cout << "Personal-details:Age=" << root_group["Personal-details"][0]["Age"]<< endl;
cout << "Personal-details:Live-City=" << root_group["Personal-details"][0]["Live-City"]<< endl;
cout << "Personal-details:Phone-Number=" << root_group["Personal-details"][0]["Phone-Number"]<< endl;
cout << "Personal-details:Phone-Number:1=" << root_group["Personal-details"][0]["Phone-Number"]["1"]<< endl;
cout << "Personal-details:Phone-Number:2=" << root_group["Personal-details"][0]["Phone-Number"]["2"]<< endl;
cout << "Personal-details:Index=" << root_group["Personal-details"][0]["Index"]<< endl;
}catch(const Json::LogicError &ex)
cout << "Parse json string error!" << endl;
f.close();
return 0;
注意一定要存在Personal-details.json文本,并且内容与解析一一对应,直接运行write_to_file可获得Personal-details.json文本,如果需要自己创建,需要相应修改源码,读取数据并解析如下:
然后解析数据:
以上都是直接对文件进行操作。
file_string_parse.cpp与read_from_file.cpp功能一直,只是读取文件并且解析方面的实现有点不一样,差异如下:
<file_string_parse.cpp>
fstream f;
f.open("Personal-details.json", ios::in);
if(!f.is_open())
cout << "Open json file error!" << endl;
ostringstream os;
os << f.rdbuf();
string s = os.str();
os.clear();
os.str("");
f.seekg(0);
bool parse_ok = reader->parse(s.data(), s.data()+s.size(), &root_group, &errs);
<read_from_file.cpp>
fstream f;
f.open("Personal-details.json", ios::in);
if(!f.is_open())
cout << "Open json file error!" << endl;
bool parse_ok = Json::parseFromStream(rbuilder, f, &root_group, &errs);
熟悉以上操作,基本上能在实际应用完成对json数据的处理。
知道了怎么处理字符串形式的json数据,下面看看将json数据写入文本以及从文本中读入进行处理。源码地址:https://github.com/jeremy505/jasoncpp-examples/blob/master/write_to_file.cpphttps://github.com/jeremy505/jasoncpp-examples/blob/master/read_from...
自己使用C++序例化好的数据,解析的时候一直出现“ParseFromIstream return false”问题,关键是有的文件可以解析成功,有的不可以解析成功。
查找了半天的时间发现是:序列化的过程中有一些字段类型赋值错误导致,我犯的错误把int类型赋值给bool类型,导致查找问题根源都定位的不对。
在使用protobuf过程中,无故出现解析相关问题,建议从两个方面入手:
第一:看看是不是把不可以兼容的类型赋值给了另外的类型,例如把int直接赋值给bool类型。
第二:看看自己定义的结构体变量是否给了初
服务端(Server)是基于 python 实现
客户端(Client)是基于 c# 实现
实现功能:基于 TCP 方式的二进制文件传输,即,客户端发出获取图片/音乐等请求,服务器端响应请求,将图片/音乐等文件转换成字节流并向客户端发送,客户端接收字节流并转换成相应文件
二、服务端(Server)实现
① 创建服务端的 socket 对象
# 创建套接字对
java本着一切皆对象的思想,导致容器中不能放基本数据类型,只能放基本数据类型的封装类对象。
也就是说List是非法的,List才合法。
因此miniproto中对于array/set/map这种类型的字段来说,不可避免的会出现拆装箱操作,比较蛋疼。
再吐槽一下j
* Time: 20:55
* To change this template use Tools | Options | Coding | Edit Standard Headers.
using System;
using Sy
C++ JSON解析之jsoncpp库的使用
轻量级的数据交换格式,采用完全独立于编程语言的文本格式来存储和表示数据,层次结构简洁清晰,易于人阅读和编写,易于机器解析和生成。
2.语法规则
a.名称/值对的集合(对象、记录、结构、字典)
b.值的有序列表(数组)
数据在名称/值对中
数据由逗号分隔
大括号保存对象
中括号保存数组
值(value)可以是双引号括起来的字符串(string)、数值(number)、true、false、 null、对象(object)或者数组(arra
Json::CharReaderBuilder builder;
if (!parseFromStream(builder, in, &root, &err)) //从ifs中读取数据到jsonRoot
最好的方法当然时修改你的读取函数,but,很多时候json数据时从别的地方读取的,它会不按定义好的规范来的。如果因为不规范导致程序退出就不好玩了是吧。
所以,如果你不想程序退出,那就修改下jsoncpp的代码吧。
比如asCstring()导...
protobuf是目前应用最广范的设计消息协议工具,具有以下一些特点:
1、proto2只支持python,c++,JAVA,proto3可以支持更多语言
2、定义协议以proto作为文件后缀名,在第一行用syntax指定proto版本
3、C++使用protobuf官方文档:http://developers.google.com/protocol-buffers/docs/cpptutoria...
package xmty;
option java_package = "comcom.xmty.java"; //定义包
option java_outer_classname = "TestTest"; //定义类名
message People{ //结构化数据
required string n...
list是一个入参,json类型,在structToJson()函数里对list进行赋值,用的是append()函数,在for循环结束后,最后在list里添加一个字段:list["total"]=nCount; 结果就出现了上面的异常,不加这行,运行没有问题。很奇怪这几行代码一开始就是这样写的,运行没有问题,结果改了其他好几个地方,就出现问题了。
string name = root["name"].asString();
int age = root["age"].asInt();
cout << "Name: " << name << endl;
cout << "Age: " << age << endl;
return 0;
在这个示例程序中,首先通过ifstream读取example.json文件,然后使用Json::Reader来解析JSON文件,解析结果存放在Json::Value对象root中。可以通过root对象来访问JSON中的数据。
在这个示例程序中,我们访问了JSON中的"name"和"age"字段,并将它们打印出来。
需要注意的是,以上示例程序中的JSON文件格式如下:
```json
"name": "John",
"age": 30
如果JSON文件的格式不正确,解析过程中可能会出现错误。因此,在实际应用中,需要根据实际情况进行错误处理。
[Inexact] Project ERROR: Could not find feature open62541.
[Inexact] Project ERROR: Library 'uacpp' is not defined.
使用Qt5.12编译qtopcua源码过程以及自带例子运行
yangliyang: