我正在尝试将简单的降价文件转换为json,降价看起来像这样:
"
我无法理解在 func main()中重构以下所需的内容:
"
上面的代码输出:
#TITLE 1
- Line 1
- Line 2
- Line 3
#TITLE 2
- Line 1
- Line 2
- Line 3
<!-- blank line -->
当我希望输出时:
type Section struct {
Category string
Lines []string
}
file, _ := os.Open("./src/basicmarkdown/basicmarkdown.md")
defer file.Close()
rgxRoot, _ := regexp.Compile("^#[^#]")
rgxBehaviour, _ := regexp.Compile("^-[ ]?.*")
scanner := bufio.NewScanner(file)
ruleArr := []*Section{}
rule := &Section{}
for scanner.Scan() {
linetext := scanner.Text()
// If it's a blank line
if rgxRoot.MatchString(linetext) {
rule := &Section{}
rule.Category = linetext
}
if rgxBehaviour.MatchString(linetext) {
rule.Lines = append(rule.Lines, linetext)
}
if len(strings.TrimSpace(linetext)) == 0 {
ruleArr = append(ruleArr, rule)
}
}
jsonSection, _ := json.MarshalIndent(ruleArr, "", "\t")
fmt.Println(string(jsonSection))
肯定有些事情是错误的。请原谅问题的详细程度,当你是一个菜鸟时,如果没有一个例子,很难解释。提前谢谢。
答案 0 :(得分:2)
在for
循环中,仔细查看此部分:
// If it's a blank line
if rgxRoot.MatchString(linetext) {
rule := &Section{} // Notice the `:=`
rule.Category = linetext
}
当您可能希望重用已在rule
循环之外创建的变量时,您基本上在if
的范围内创建了一个新的for
变量。
因此,请尝试将其更改为:
// If it's a blank line
if rgxRoot.MatchString(linetext) {
rule = &Section{} // Notice the `=`
rule.Category = linetext
}