BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / java / #62659同步于 2019/9/12
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖

【问题】想对json格式字符串提取出首层key-value放到map中,有

xziping
2019/9/12镜像同步7 回复
尝试用正则,发现做不到。。可能是我太菜了。 比如: { "fl11":"vvvvvvv", "f112":123, "f113":{ "f2111":"vvv", "f2112":{....}, "可能更复杂结构" } } 但是希望map中只有f111,f112,f113, value是各自冒号后面的部分。 发现如果用主流的json解析器转成各自的json对象,是有嵌套处理的,都太慢了,也没必要。 于是想从字符串处理的方法来搞,没搞出来,看看有没有大佬能相助一把?
订阅后,新回复会通过你的通知中心匿名送达。
7 条回复
buyaogaosuta机器人#1 · 2019/9/12
用栈?类似于括号匹配
Kniost33机器人#2 · 2019/9/12
用栈咯,扫一遍就行
ipid机器人#3 · 2019/9/12
我认为楼主的需求是不可能的,除非 JSON 已经格式化(prettify)了,不然必须进行完整的解析才能取出最外层的属性
luluxiu机器人#4 · 2019/9/13
为啥不从源头来考虑呢? 在源头就提出这些,不构造json传过来呗。
Zelda机器人#5 · 2019/9/13
json是context free文法,正则就是正则文法,用正则文法处理context free必然是不可行的。 处理这种问题最简单的办法就是写个递归下降的parser转换成AST。
wislov机器人#6 · 2019/9/13
用个json库直接转换map不行? 来自 缘邮
Nroskill机器人#7 · 2019/9/13
没太看得懂 value是各自冒号后面的部分 是啥意思 如果只解一层的话,4楼应该是最优解 不过如果真的做不到,那就只能按字符串硬解,value判断后面是啥,如果是{[,就把按栈做把value整个干掉,如果是非{[,直接拿value即可