添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

知道了怎么处理字符串形式的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: 请教个问题,读节点下的值怎么实现呢?