我正在通过命令行读取一个文件。
由于该文件是从Oracle导出的JSON,因此它具有一定的结构。由于某些原因,此默认结构不是有效的JSON。例子:
,"items":
[
{"id":123,"language":"ja-JP","location":"Osaka"}
,{"id":33,"language":"ja-JP","location":"Tokyo"}
,{"id":22,"language":"ja-JP","location":"Kentok"}
]}
我希望它只是一个对象数组,因此具有预期的输出:
// This is valid json
[
{"id":123,"language":"ja-JP","location":"Osaka"}
,{"id":33,"language":"ja-JP","location":"Tokyo"}
,{"id":22,"language":"ja-JP","location":"Kentok"}
]
因此,我需要删除第1行(全部)以及最后一行
}
从文件的最后一行。
正在通过命令行从输入中分析文件:
file, err := ioutil.ReadFile(os.Args[1])
removeInvalidJSON(file, os.Args[1])
func removeInvalidJSON(file []byte, path string) {
info, _ := os.Stat(path)
mode := info.Mode()
array := strings.Split(string(file), "\n")
fmt.Println(array)
if strings.Contains(array[0], "items") {
fmt.Println("Removing items")
array = append(array[:1], array[1+1:]...)
}
lastIndex := array[len(array)-1]
if strings.Contains(lastIndex, "}") {
fmt.Println("Removing }")
strings.Trim(lastIndex, "}")
}
fmt.Println(array)
ioutil.WriteFile(path, []byte(strings.Join(array, "\n")), mode)
}
上面的函数确实写入了我能看到的文件-但据我所知,它不会改变数组,也不会将其写入文件。
如何有效地远程控制文件的第一行以及最后一个假大括号
}
从档案里?
我在另一个函数中解开JSON:是否有一种方法可以使用
"encoding/json"
图书馆?