我正在Angular应用程序上进行翻译项目。我已经为此创建了所有不同的键。我现在尝试使用Go编程语言在我的翻译中添加一些功能,以便在以后快速工作。
我尝试使用Go编程语言编写函数,以便在命令行上读取输入用户。我需要阅读此输入文件,以了解内部是否缺少键。此输入用户必须是JSON文件。我对此函数有问题,在functions.Check(err)
被阻止,为了调试我的函数,我用fmt.Printf(variable to display)
显示了另一个变量。
我在主函数中将此函数称为readInput()
。
readInput()
函数如下:
// this function is used to read the user's input on the command line
func readInput() string {
// we create a reader
reader := bufio.NewReader(os.Stdin)
// we read the user's input
answer, err := reader.ReadString('\n')
// we check if any errors have occured while reading
functions.Check(err)
// we trim the "\n" from the answer to only keep the string input by the user
answer = strings.Trim(answer, "\n")
return answer
}
在我的主要功能中,我为创建的特定命令调用readInput()
。此命令行对于更新JSON文件并自动添加丢失的密钥非常有用。
我的func main
是:
func main() {
if os.Args[1] == "update-json-from-json" {
fmt.Printf("please enter the name of the json file that will be used to
update the json file:")
jsonFile := readInput()
fmt.Printf("please enter the ISO code of the locale for which you want to update the json file: ")
// we read the user's input
locale := readInput()
// we launch the script
scripts.AddMissingKeysToJsonFromJson(jsonFile, locale)
}
我可以为您提供用于此代码go run mis-t.go update-json-from-json
的命令行
请问您我的代码中缺少什么吗?
答案 0 :(得分:1)
假设文件包含动态和未知的键和值,并且您无法在应用程序中对其进行建模。然后您可以执行以下操作:
func main() {
if os.Args[1] == "update-json-from-json" {
...
jsonFile := readInput()
var jsonKeys interface{}
err := json.Unmarshal(jsonFile, &jsonKeys)
functions.Check(err)
...
}
}
将内容加载到empty interface
中,然后使用go反射库(https://golang.org/pkg/reflect/)遍历字段,找到它们的名称和值并根据需要进行更新。
另一种方法是将Unmarshal编成map[string]string
,但这不能很好地解决嵌套JSON的问题,而这可能会(但我尚未测试)。