You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Go语言不定义struct实现向JSON文件指定嵌套cities数组添加字符串值

首先先纠正你原有代码中的两个小问题:

  1. 函数参数定义的是jsonFilePath,但读文件时你用了未定义的jsonFile变量
  2. 要传入城市列表的话,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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 20:27:03