我有以下数据:
dbCon= {
main = {
database = "db1",
hostname = "db1.serv.com",
maxConnCount = "5",
port = "3306",
slaves = [
{
charset = "utf8",
client = "MYSQL",
compression = "true",
database = "db1_a",
hostname = "db1-a.serv.com",
maxConnCount = "5",
port = "3306",
}
{
charset = "utf8",
client = "MYSQL",
compression = "true",
database = "db1_b",
hostname = "db1-b.serv.com",
maxConnCount = "5",
port = "3306",
}
]
username = "user-1"
}
}
我正在尝试使用 Grako 将其转换为 JSON,但我无法正确获取 EBNF 格式。这是我所拥有的:
import grako
import json
grammar_ebnf = """
final = @:({ any } | { bracketed } | { braced });
braced = '{' @:( { bracketed } | { braced } | { any } ) '}' ;
bracketed = '[' @:( { braced } | { bracketed } | { any } ) ']' ;
any = /^[^\[\{\]\}\n]+/ ;
"""
model = grako.genmodel("final", grammar_ebnf)
with open('out.txt') as f:
ast = model.parse(f.read())
print (json.dumps(ast, indent = 4))
但是,这只是打印出来:
[
"dbCon = "
]
我哪里错了?我从来没有用过Grako。我只是希望能够将其解析为可用/可访问的内容,而无需设计静态解析器以防格式更改。如果稍后格式发生变化,更新 EBNF 似乎比重新编写整个解析器更容易。