Go语言不定义struct实现向JSON文件指定嵌套cities数组添加字符串值
首先先纠正你原有代码中的两个小问题:
- 函数参数定义的是
jsonFilePath,但读文件时你用了未定义的jsonFile变量 - 要传入城市列表的话,
cityNames参数建议定义为[]string类型更合理,以下实现默认按cityNames []string处理,如果你确实是用字符串拼接的格式,自行加一步分割即可
待实现注释部分的完整代码(包含层级遍历修正+类型安全校验)
// 先拿到当前区域的countries数组 countriesArr, ok := m["countries"].([]interface{}) if !ok { continue } // 遍历countries数组找包含FR键的对象 for _, countryItem := range countriesArr { countryMap, ok := countryItem.(map[string]interface{}) if !ok { continue } // 找到FR对应的数组 frArr, frExists := countryMap["FR"] if !frExists { continue } frContentArr, ok := frArr.([]interface{}) if !ok || len(frContentArr) == 0 { continue } // 拿到FR下的第一个元素,也就是包含time和cities的map frInfo, ok := frContentArr[0].(map[string]interface{}) if !ok { continue } // 拿到原有cities数组 citiesArr, ok := frInfo["cities"].([]interface{}) if !ok { continue } // 把传入的城市列表添加到cities数组 for _, city := range cityNames { citiesArr = append(citiesArr, city) } // 把新的cities数组赋值回去 frInfo["cities"] = citiesArr }
原有遍历逻辑的问题说明
你之前直接把result["region"]断言为countries数组是错误的,result["region"]是区域数组,每个元素是包含location、currency、countries三个字段的区域对象,需要先取到区域对象里的countries字段再遍历找FR对应的配置。
如果需要完全避免panic风险,可以给每一步类型断言都加上错误返回逻辑,上面的示例用continue跳过非法结构,你可以根据自己的业务要求调整错误处理逻辑。
内容的提问来源于stack exchange,提问作者Ashkanxy
相关产品推荐
相关产品推荐

