json 反序列化怎么把行号和对象映射起来?

2023-08-18 09:59:39 +08:00
 jonty
做了一个特定 json 文本内容的风格和逻辑检查工具,之前使用的方案是找到内容错误后返回关键词,然后去全文匹配,但是这个方法有很多漏洞,比如关键词重复..、
使用的是 rapidjson 解析
现在想换一个方法来返回错误行号,有什么好的方法吗?
1173 次点击
所在节点    C++
4 条回复
gadfly3173
2023-08-18 10:18:39 +08:00
简单搜索了一下,如果你要的是解析错误的话好像这个 pr 已经解决了: https://github.com/Tencent/rapidjson/pull/1070 ,如果是风格检查的话,获取解析前的行号好像做不到,但是你可以换成展示错误所在的节点?比如返回 obj[0].content 之类的
jonty
2023-08-18 10:24:31 +08:00
@gadfly3173 #1 你好,可能我没表达清楚我的意思。我说的检查工具其实是 json 已经成功反序列化后成对象了,我对对象进行的风格和逻辑检查。
hitmanx
2023-08-18 10:30:06 +08:00
用 C++遍历每一行去 tokenize JSON 文件,记录当前的行号。tokenize 过程中把每一个 token(string, number, {, }, [, ], ..)的行号和 token 一起记录下来。然后和往常一样 parse tokens ,但是把行号信息一起取出存在节点里。这样每个节点就有了行号信息
jonty
2023-08-18 10:32:42 +08:00
@hitmanx #3 好的,我尝试一下

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/966325

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX