之前有遇到一个将复杂结构的 JSON 给转成另一种结构来使用,写的代码还是有点复杂,于是想到能不能写个工具可以快速实现 JSON 的结构转换。
初步想法:
如何简单地描述目标 JSON 的结构是一个难点,既要完整地表述出目标 JSON 的结构框架,又不能太复杂,否则可能还不如直接代码实现来的快。所以请教下各位有没有什么的好的思路?
1
GeruzoniAnsasu 2018-11-05 11:45:04 +08:00
你在说啥。。。几乎所有的编程语言都有将 json 转成本语言便于描述的结构的轮子
你想造个啥 |
2
glacer OP @GeruzoniAnsasu 举个例子。把{"a": {"b": 1}}转成{"a": [["b",2]]}的格式。
|
3
glacer OP @GeruzoniAnsasu 写错,转成{"a": [["b",1]]},内容不能改变。
|
4
GeruzoniAnsasu 2018-11-05 12:01:43 +08:00
@glacer 意思是比如将 dict 转成 tuple list 之类的这种保持类似结构的转化吗。。。然后还要保证通用性?
我怎么觉得没有通用性呢。。。某个 node 要从 dict 变 list 这种事怎么说得准。。还不如临到用时写个脚本转。。或者跟前后端吵一架来得直接 |
5
misaka19000 2018-11-05 12:06:55 +08:00 via Android
做词法分析和语法分析就可以了吧,最后修改一下语法树应该就能满足楼主的需求了
|
6
feverzsj 2018-11-05 12:08:49 +08:00
意义不明,你要被内部结构序列化成 json,也是可以的
|
7
imn1 2018-11-05 12:36:15 +08:00
我还以为 json 转 csv, xml 之类
|
8
feiyuanqiu 2018-11-05 12:37:08 +08:00 via Android
没必要这么复杂,定义一个源数据类、一个目标数据类和两者的转换类,json 的解析交给 gson 之类的库就行了
|
9
GeruzoniAnsasu 2018-11-05 12:39:02 +08:00
暂且先不管具体想实现什么,建议看看 cjson 这种语言本身没什么轮子的实现,思路会比较清晰且通用
比如怎么用通用节点结构来表示数据,cjson 用的是一个包括了所有数据类型的结构来表示节点,然后用一个 type 字段表示.valueint .valuedouble .valuestring .child 等各个字段哪些是有效的,json object 和 array 都统一用单链表表示,这样类型转换的开销也非常小,移动节点也就是移动一下指针的事 需要考虑的最复杂的东西是怎么处理指针的生命周期,怎么保证指针指向结构的有效性,这个有兴趣自己研究吧 |
10
zxcvsh 2018-11-05 12:47:14 +08:00 via iPhone
第三方工具解决很快,如果你很急的话
|
11
V2exUser 2018-11-05 12:50:38 +08:00 via Android
如果你自己没什么实现思路,也不是为了练手,只是使用的话,找现有的轮子吧
|
12
PulpFunction 2018-11-05 12:59:09 +08:00 via Android
字典里面套(字典或者数组)
|
13
zzj0311 2018-11-05 13:01:40 +08:00 via Android
不是很懂你要干嘛,明明有现成的序列化轮子,要啥取啥不就完了,还要描述干嘛。。
|
14
verrickt 2018-11-05 13:11:50 +08:00 via Android
最快的方法:用语言的 JSON 库,反序列化,处理,序列化。
最折腾的方法:自己写个 JSON to JSON 的编译器。前端接受源 JSON 文件,词法分析,语法分析和语义分析后生成语法树。后端遍历语法书生成目标 JSON 格式。 不知道 lz 打算怎么解析源 JSON。我提个醒,正则表达式不足以描述 JSON 格式 这是我当时造轮子看的教程。lz 可以只看 3,4 节。搞清楚正则语言和上下文无关语言的适用范围就可以动手撸了 https://www.cnblogs.com/Ninputer/archive/2011/06/07/2074632.html |