V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
jonty
V2EX  ›  C++

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

  •  
  •   jonty · 2023-08-18 09:59:39 +08:00 · 1170 次点击
    这是一个创建于 464 天前的主题,其中的信息可能已经有所发展或是发生改变。
    做了一个特定 json 文本内容的风格和逻辑检查工具,之前使用的方案是找到内容错误后返回关键词,然后去全文匹配,但是这个方法有很多漏洞,比如关键词重复..、
    使用的是 rapidjson 解析
    现在想换一个方法来返回错误行号,有什么好的方法吗?
    4 条回复    2023-08-18 10:32:42 +08:00
    gadfly3173
        1
    gadfly3173  
       2023-08-18 10:18:39 +08:00 via Android
    简单搜索了一下,如果你要的是解析错误的话好像这个 pr 已经解决了: https://github.com/Tencent/rapidjson/pull/1070 ,如果是风格检查的话,获取解析前的行号好像做不到,但是你可以换成展示错误所在的节点?比如返回 obj[0].content 之类的
    jonty
        2
    jonty  
    OP
       2023-08-18 10:24:31 +08:00
    @gadfly3173 #1 你好,可能我没表达清楚我的意思。我说的检查工具其实是 json 已经成功反序列化后成对象了,我对对象进行的风格和逻辑检查。
    hitmanx
        3
    hitmanx  
       2023-08-18 10:30:06 +08:00
    用 C++遍历每一行去 tokenize JSON 文件,记录当前的行号。tokenize 过程中把每一个 token(string, number, {, }, [, ], ..)的行号和 token 一起记录下来。然后和往常一样 parse tokens ,但是把行号信息一起取出存在节点里。这样每个节点就有了行号信息
    jonty
        4
    jonty  
    OP
       2023-08-18 10:32:42 +08:00
    @hitmanx #3 好的,我尝试一下
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2340 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 16:08 · PVG 00:08 · LAX 08:08 · JFK 11:08
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.