V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
jonty
V2EX  ›  C++

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

  •  
  •   jonty · Aug 18, 2023 · 1755 views
    This topic created in 984 days ago, the information mentioned may be changed or developed.
    做了一个特定 json 文本内容的风格和逻辑检查工具,之前使用的方案是找到内容错误后返回关键词,然后去全文匹配,但是这个方法有很多漏洞,比如关键词重复..、
    使用的是 rapidjson 解析
    现在想换一个方法来返回错误行号,有什么好的方法吗?
    4 replies    2023-08-18 10:32:42 +08:00
    gadfly3173
        1
    gadfly3173  
       Aug 18, 2023 via Android
    简单搜索了一下,如果你要的是解析错误的话好像这个 pr 已经解决了: https://github.com/Tencent/rapidjson/pull/1070 ,如果是风格检查的话,获取解析前的行号好像做不到,但是你可以换成展示错误所在的节点?比如返回 obj[0].content 之类的
    jonty
        2
    jonty  
    OP
       Aug 18, 2023
    @gadfly3173 #1 你好,可能我没表达清楚我的意思。我说的检查工具其实是 json 已经成功反序列化后成对象了,我对对象进行的风格和逻辑检查。
    hitmanx
        3
    hitmanx  
       Aug 18, 2023
    用 C++遍历每一行去 tokenize JSON 文件,记录当前的行号。tokenize 过程中把每一个 token(string, number, {, }, [, ], ..)的行号和 token 一起记录下来。然后和往常一样 parse tokens ,但是把行号信息一起取出存在节点里。这样每个节点就有了行号信息
    jonty
        4
    jonty  
    OP
       Aug 18, 2023
    @hitmanx #3 好的,我尝试一下
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1004 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 39ms · UTC 20:13 · PVG 04:13 · LAX 13:13 · JFK 16:13
    ♥ Do have faith in what you're doing.