如何在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
相关产品推荐
相关产品推荐

