将结构中的字符串转换为 [] 字符串

Convert string in struct to []string

我有一个 struct 如下:

type TourData struct {
    ArtistID   int    //artist ID
    RelationID string //key for relations
    City       string
    Country    string
    TourDates  []string
}

type MyRelation struct {
    ID             int                 `json:"id"`
    DatesLocations map[string][]string `json:"datesLocations"`
}

其中包含来自 csv 文件的数据:

1,nagoya-japan,Nagoya,Japan,
1,penrose-new_zealand,Penrose,New_Zealand,
1,dunedin-new_zealand,Dunedin,New_Zealand,
2,playa_del_carmen-mexico,Playa Del Carmen,Mexico,
2,papeete-french_polynesia,Papeete,French_Polynesia,

MyRelations 由 API 填充,其中包含:

"index": [
        {
            "id": 1,
            "datesLocations": {
                "dunedin-new_zealand": [
                    "10-02-2020"
                ],
                "nagoya-japan": [
                    "30-01-2019"
                ],
                "penrose-new_zealand": [
                    "07-02-2020"
                ]
            }
        },
        {
            "id": 2,
            "datesLocations": {
                "papeete-french_polynesia": [
                    "16-11-2019"
                ],
                "playa_del_carmen-mexico": [
                    "05-12-2019",
                    "06-12-2019",
                    "07-12-2019",
                    "08-12-2019",
                    "09-12-2019"
                ]
            }
        }

日期来自另一个结构。我用来填充这个结构的代码如下:

var oneRecord TourData
    var allRecords []TourData

for _, each := range csvData {
    oneRecord.ArtistID, _ = strconv.Atoi(each[0])
    oneRecord.RelationID = each[1]
    oneRecord.City = each[2]
    oneRecord.Country = each[3]
    oneRecord.TourDates = Relations.Index[oneRecord.ArtistID-1].DatesLocations[each[1]]
    allRecords = append(allRecords, oneRecord)
}
    
jsondata, err := json.Marshal(allRecords) // convert to JSON
json.Unmarshal(jsondata, &TourThings)

我需要将所有 1 组合在一起,然后将 2 等组合在一起。我想创建另一个结构,并从这个结构填充,但运气不佳 - 有什么想法吗?

澄清一下,我想说 TourData.City 等于:

[Nagoya,Penrose,Dunedin]
[Playa Del Carmen, Papeete]

目前,如果我要打印 TourData[0].City,我会得到 Nagoya。

我尝试创建另一个结构,以使用以下字段从 TourData 结构填充:

type TourDataArrays struct {
    ArtistID  int
    City      []string
    Country   []string
    TourDates [][]string
}

然后使用以下代码填充结构:

var tourRecord TourDataArrays
    var tourRecords []TourDataArrays
    for i := 0; i < len(Relations.Index); i++ {
        for j := 0; j < len(allRecords); j++ {
            if allRecords[i].ArtistID == i+1 {
                tourRecord.City = append(tourRecord.City, allRecords[j].City)
            }
        }
        tourRecords = append(tourRecords, tourRecord)
    }

然而,这是将所有城市添加到一个数组中,即

[名古屋、彭罗斯、但尼丁、普拉亚德尔卡曼、帕皮提]。

如果我正确理解了您的要求,您还需要将 city 声明为字符串数组。 (以及相应的国家/地区)。

查看此解决方案:https://go.dev/play/p/osgkbfWV3c5

请注意,我没有从 Json.

中的一个字段中删除国家/地区以及派生城市和国家/地区的重复数据