json-filter icon indicating copy to clipboard operation
json-filter copied to clipboard

golang json字段过滤,复用struct 随意选择你想要输出为json的结构体字段。 json filter Golang's JSON filter randomly selects the structure fields you want to output as JSON,Let go have dynamic language l...

Results 3 json-filter issues
Sort by recently updated
recently updated
newest added

该issue主要讨论如何对过滤性能进行进一步提升,目前此项目是利用反射获取结构体的字段信息,把打标记的字段提取出来,挂载在一个n叉树的结构体上,在过滤时为了提高性能,利用了缓存,进行了3个版本的优化策略 最早版本 : 遍历整个结构体的所有字段,遍历到最深层,然后每遍历一个字段就获取一下字段的json tag 然后判断是否被选中,提取出需要用的 目前版本:缓存了所有结构体字段的tag信息,遍历每一个字段时即可知道该字段是否选中,不需要获取tag信息,不需要字符串处理,有了很大的性能提升, 目前优化的新版本:在调用过滤方法时,根据结构体的pkg path生成一个新的缓存n叉树,该数据结构仅仅存储该结构体在该缓存场景下的所有字段的index下标信息,在遍历结构体时根据下标跳过那些被过滤掉的字段,此时避免了大部分无用的反射,而且不需要进行字符串处理,性能又进行了很大幅度的提升(特别是在,select模式下一个10个字段的结构体,选择了2-3个等类似操作,也就是字段很多却选中很少的情况下此时性能会暴击提升,因为其余的7-8个字段根本不会被反射) 接下来的优化方向:内置json编码功能,提升反射性能

enhancement

想请教一下,json-filter在序列化某个含有其他实现了自定义序列化函数的结构体时候,无法调用到这个函数的自定义序列化函数,比如下列定义 ``` type a struct{ Field StringArray `json: "field,select(test)"` } type StringArray struct{ V []string } func (n *StringArray) MarshalJSON() ([]byte, error) { return json.Marshal(n.V) } ``` 理想状态下,对结构体a进行序列化验证代码如下: ``` package...