- 主题:json反序列化的C++库,用哪个?
json -> c++ object。
由于各种原因,没有使用protobuf,而是用了json。
用jsoncpp手写代码挨个提取json节点里的数据挺无聊的,纯粹是堆代码行数。
看到一些用boost::fusion/boost::hana搞的。
这个star值挺高的
https://github.com/nlohmann/json#serialization--deserialization
不知道有没啥推荐的
--
FROM 114.241.227.*
看了一下,protobuf新版支持json和binary的互转:
https://developers.google.com/protocol-buffers/docs/reference/cpp/google.protobuf.util.json_util
【 在 ble 的大作中提到: 】
: 还是protobuf啊,重点不是怎么把schema映射成c++数据结构么。
: 至于中间用json还是二进制,只不过改一个函数的事情。
: 好像很多大厂都用nlohmann-json, 主要是对c++新标准支持的好。
: ...................
--
FROM 114.241.227.*
C++的Reflection TS啥时候final?
【 在 KillnCov 的大作中提到: 】
: protobuf是通信协议, 不是用来序列化对象的。完全不同的用处。
: 很多人非要把proto用来存储对象,变向说明c++的序列化没啥好用的库。
:
--
FROM 114.241.227.*
agent和server之间通信,消息类型有个20+,而且会扩充。
agent和server可能是异构的,cpu硬件不一样
【 在 ziqin 的大作中提到: 】
: json不能说是序列化了,而是人肉可读性很高的抽象化了
: 稍微复杂一些,带一些动态结构的object,如果还是要走json这条路,那基本肯定是要多一步转换函数的。
: 如果仅仅需求是方便的正反序列化,且侵入性不算太强的,boost::serialization, boost::ipc::managed_heap_memory/managed_external_buffer,第一个是传统的编码序列化,第二个是分配一块内存,把所有静态和动态的结构都建在内存中,然后直接把内存按顺序发过去,但是序列化效率有待检验
: ...................
--
FROM 114.241.227.*
我感觉现在的代码已经接近于屎山了
不过实际项目中我估计99%的项目都是在赶需求进度,有些人甚至到处复制老的代码块和函数改改,json解析那更不用说,先堆代码打通功能再说
不过这并不妨碍在搬砖的同时想想怎么能做得更好,在2.0、3.0重构时(如果还有重构的机会)能用一种更好的写法。到时也得有理由说服别人。
【 在 ziqin 的大作中提到: 】
: 第一个扩充是什么意义上的?有多大成分是运行时的?我的理解是,在一般的应用场合,A <--> S 之间的通讯,即使在通讯结构转换这个层面有必要做到纯运行时,但是在业务逻辑层面,多多少少都是要在代码层面增补的(编译时)。
: 第二个,如果不涉及cpu cache hit rate之类的,硬件其实无所谓,大小端统一的问题,网络库层应该内部搞定,和应用层没关系。
: 听下来还是序列化的老问题,就是动态结构(vector, map之类)怎么自动正反序列化。protobuf msg可以有descriptor,可以实现动态转换,json如果没有这个机制,恐怕你的需求是不行的。如果对运行、传输和编码效率没有太高要求的话,我觉得可以用boost::ipc::managed_external_buffer,就是运行的时候都是boost::ipc 的container了。
: ...................
--
FROM 114.241.227.*
Circle居然是solo出来的C++编译器?老牛了
【 在 DoorWay 的大作中提到: 】
: 哈哈,就用那个nl…man,名字不好拼那个,出镜率很高。我看红点时,刷到过好多次。
: 至于cpp的reflection…… 且着呢,老码农换语言换平台前,能用上module就不错了~
: Qt写moc的那个人,好像也一直等着,实现基于反射的moc,好去掉moc,洗白Qt不是cpp的谣言:-)
: ...................
--
FROM 114.241.227.*