You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在JavaScript中搜索JSON键的目标字符串并获取对应行号?求推荐库

解决JSON键行号搜索的工具库方案

因为解析后的JSON对象会丢失原始文本的行号信息,所以不能先将JSON转成字典/对象再搜索,得直接针对原始文本处理。以下是不同语言生态下可用的工具库:

Python 生态

  • pyparsing:可自定义JSON解析规则,解析过程中直接捕获每个键的行号位置。示例代码:
    from pyparsing import *
    
    # 定义JSON键解析规则,捕获1起始行号
    json_key = QuotedString('"').setName("json_key")
    json_key.addParseAction(lambda s,l,t: (t[0], l+1))
    
    # 递归定义JSON对象结构,支持嵌套解析
    json_value = Forward()
    json_object = Dict(Literal("{") + ZeroOrMore(json_key + Literal(":") + json_value + Optional(Literal(","))) + Literal("}"))
    json_value << (json_object | QuotedString('"') + Optional(","))
    
    # 解析目标JSON文本并查找指定键的行号
    raw_json = """{
      "name": "John Doe",
      "age": 30,
      "occupation": "Software Engineer",
      "address": {
        "street": "123 Main Street",
        "city": "Anytown",
        "state": "CA",
        "zip": "98765"
      },
      "phone": {
        "home": "(123) 456-7890",
        "mobile": "(987) 654-3210"
      },
      "email": "johndoe@email.com"
    }"""
    
    results = json_object.parseString(raw_json)
    target_key = "mobile"
    for key, line_num in results.items():
        if key == target_key:
            print(line_num) # 输出13
    
  • yajl-py:YAJL的Python绑定,支持流式解析JSON,同时能获取每个Token的行号、列号,适合处理大体积JSON文件。

JavaScript 生态

  • json-source-map:解析JSON后生成源映射,包含每个键值对的起始/结束行号、列号。使用示例:
    const jsonSourceMap = require('json-source-map');
    const rawJson = `{
      "name": "John Doe",
      "age": 30,
      "occupation": "Software Engineer",
      "address": {
        "street": "123 Main Street",
        "city": "Anytown",
        "state": "CA",
        "zip": "98765"
      },
      "phone": {
        "home": "(123) 456-7890",
        "mobile": "(987) 654-3210"
      },
      "email": "johndoe@email.com"
    }`;
    
    const parseResult = jsonSourceMap.parse(rawJson);
    // 转换为1起始行号输出
    console.log(parseResult.pointers['/phone/mobile'].key.start.line + 1); // 输出13
    

如果不想依赖第三方库,也可以用正则配合逐行扫描,但需要额外处理嵌套大括号的层级(避免混淆内外层键),这种方式容易出现边界问题,不如工具库可靠。

内容的提问来源于stack exchange,提问作者bob piper

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 10:38:14