php editor Apple will introduce you how to convert a Golang map into another map structure. During the development process, sometimes we need to perform some conversion operations on the original map to meet specific needs. Whether it is data type conversion or structural reorganization, it can be achieved through some simple methods. This article will analyze this process in detail for you, help you quickly master this technique, and improve development efficiency. Let’s explore this interesting conversion process together!
I need help converting this input map to an output map. I tried using switch/case and for with no success. Thank you so much!
enter:
values{ "toto_voiture_brand": ad{ "citroen": "citroen", }, "toto_voiture_model": ad{ "citroen_toto": "c3", }, "toto_moto_brand": ad{ "kawasaki": "kawasaki", }, "toto_moto_model": ad{ "kawasaki_tata": "ninja 1000 sx", }, "toto_camion_brand": ad{ "renault": "renault", "peugeot": "peugeot", }, "toto_camion_model": ad{ "renault_toto": "j5", "peugeot_tata": "255", }, }, }
Output
Values{ "toto_voiture_model": { "Citroen": { {Value: "C3"}, }, }, "toto_moto_model": { "Kawasaki": { {Value: "Ninja 1000 SX"}, }, }, "toto_camion_model": { "RENAULT": { {Value: "J5"}, }, "PEUGEOT": { {Value: "255"}, }, }, }
I've tried using switch case and loops for and maps. But I don't have the result participants, I don't find how to match each map, key and value. Many thanks
I should use the following code to manage what you need:
package main import ( "encoding/json" "fmt" "strings" ) type Output struct { Value string `json:"Value"` } func main() { // declare output output := make(map[string]map[string]Output, 0) // input input := make(map[string]map[string]string, 0) input["toto_voiture_brand"] = map[string]string{ "CITROEN": "CITROEN", } input["toto_voiture_model"] = map[string]string{ "CITROEN_toto": "C3", } input["toto_moto_model"] = map[string]string{ "KAWASAKI_tata": "Ninja 1000 SX", } input["toto_camion_model"] = map[string]string{ "RENAULT_toto": "J5", "PEUGEOT_tata": "255", } // transformation for k, v := range input { if strings.HasSuffix(k, "_model") { tempMap := make(map[string]Output, len(v)) for kk, vv := range v { key := strings.Split(kk, "_")[0] tempMap[key] = Output{ Value: vv, } } output[k] = tempMap } } data, _ := json.MarshalIndent(&output, "", "\t") fmt.Println(string(data)) }
I added some comments in the code just to separate the various parts. The first two parts are only used to define input and output variables.
The section starting with // conversion
is a good candidate to be a function, but I prefer to keep it in the main
function for demonstration purposes. Let me recap what happened in loop
:
input
variables_model
, it is taken into accounttempmap
[string]output that contains the correct number of elements we want to addv
variable (that's why we deal with nested mappings) tempmap
output
)The last part just prints a nice json that can be easily read and inspected.
Please note that this code is simplified just to show how to achieve your goal, please adjust it before putting it into production.
Please tell me if this helps, thank you!
The above is the detailed content of Convert a golang map into another map structure. For more information, please follow other related articles on the PHP Chinese website!