Comments (12)
这几天看一下这个问题。
from iguana.
iguana::from_json(v2, s); 是这一行报错。tojson没有问题。
from iguana.
from_json 漏掉了代码,稍后等PR 合并之后你再拉master 代码测试一下吧。
from iguana.
struct nest1 {
std::string name;
my_space::my_struct value;
std::variant<int, std::string, std::vector, client::person> var;
bool operator==(const nest1& o) const {
return name == o.name && value == o.value;
}
};
REFLECTION(nest1, name, value, var);
void example2() {
std::variant<int, std::string, std::vector, client::person> var;
client::person p;
p.age = 20;
p.name = "jack";
var = p;
nest1 v{"Hi", {1, 2, 3}, var}, v2;
std::string s;
iguana::to_json(v, s);
std::cout << s << std::endl;
iguana::from_json(v2, s);
assert(v == v2);
}
你好,我在std::variant中多添加了person结构体,然后var使用person结构体赋值,代码如上。
编译可以正常,运行的时候tojson可以正常序列化,然后fromjson会出现运行异常。
请问这是什么原因?望回复,感谢!
from iguana.
这个测试代码不完整吧,vector里面是啥,person的定义啥的呢?
from iguana.
不好意思,贴的代码有问题,我重新贴下:
namespace client {
struct person {
std::string name;
int64_t age;
};
REFLECTION(person, name, age);
} // namespace client
struct nest1 {
std::string name;
my_space::my_struct value;
std::variant<int, std::string, client::person> var;
bool operator==(const nest1& o) const {
return name == o.name && value == o.value;
}
};
REFLECTION(nest1, name, value, var);
void example2() {
std::variant<int, std::string, client::person> var;
client::person p;
p.age = 20;
p.name = "jack";
var = p;
nest1 v{"Hi", {1, 2, 3}, var}, v2;
std::string s;
iguana::to_json(v, s);
std::cout << s << std::endl;
iguana::from_json(v2, s);
assert(v == v2);
}
您再看下,我把vector删了,person就是example_json例子里面的结构体。
from iguana.
提了一个pr 修复反序列化variant类型。
不过还是尽量不用variant类型为好,反序列化的效率比较低,会尝试多次反序列化variant中可能的类型,直到成功为止,最坏的情况需要尝试variant_size_v - 1 次。
from iguana.
谢谢答复。那确实类型多了,效率就低。但是我这样需求:数据格式为{"seq":1, "type":"login", "data":{...}},其中data会根据type类型不同,会是不同json类型,可能是对象,可能是数组,可能是整形等。
我是想到使用variant 变量来定义data这个json字段,从而实现需求。是否还有其他效率高的方法可以实现呢?
from iguana.
代码已经合并了,反序列化支持了variant。
也许可以分成两部分,把data单独分开,data就用具体的类型,前面的部分增加一个data_type 字段。后面先解析data type,然后再根据其类型去解析具体的data。
from iguana.
不过可以先试试variant 效率怎么样,说不定也能满足你的需求。
from iguana.
代码已经合并了,反序列化支持了variant。
也许可以分成两部分,把data单独分开,data就用具体的类型,前面的部分增加一个data_type 字段。后面先解析data type,然后再根据其类型去解析具体的data。
我们没太明白这个思路,针对这个示例{"seq":1, "type":"login", "data":{...}},你的意思是先定义一个结构体 struct header{int seq, string type},然后先反序列化为header,再根据type使用具体类型:比如struct login{int seq, string type, 具体data},再反序列化一次吗?
from iguana.
不是,是分成两个结构体,一个是header,一个是data,先反序列化header,再根据header 反序列化data。
from iguana.
Related Issues (20)
- yaml解析字符串有注释时和`\t`抛异常 HOT 2
- json不支持std::variant类型吗?编译出错,能支持std::variant类型吗? HOT 3
- 当头文件#include <windows.h>在前面时,编译报错。 HOT 2
- error C7571: “iguana::char_t”: 已初始化变量模板 HOT 3
- error: 序列化char时候出错 HOT 11
- unexpected exception HOT 2
- from_json unexpected exception
- yaml 序列的解析
- std::pair<std::string,Color> 序列化枚举不支持 HOT 9
- 请支持一下std::set HOT 3
- unexpected parse failed HOT 1
- json内嵌子对象,我如何将子对象转为对应的结构体? HOT 5
- 有没有打算支持继承类的智能指针呢? HOT 2
- json解析0.0为int HOT 6
- 对于union目前有好的处理办法吗? HOT 3
- 在安卓平台上运行iguana::from_json(data, str);会报错: cannot locate symbol "__emutls_get_address" HOT 2
- 自定义结构体转jsonStr的时候 打印出来的浮点值会有科学计数法的后缀E0 HOT 7
- json解析不支持REFLECTION_ALIAS? HOT 1
- 支持unicode类型吗
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from iguana.