Problem statement
Given an input JSON like this
{
"results": [
{
"id": 1,
"relationx_id": "11"
},
{
"id": 2,
"relationx_id": "22"
}
],
"lookup_key": "relationx_id"
}
and a mapping JSON like this
{
"11": "88",
"22": "99"
}
Use the lookup_key to replace the value of the key as per the mapping JSON. The result should look like this
{
"lookup_key": "relationx_id",
"results": [
{
"id": 1,
"relationx_id": "88"
},
{
"id": 2,
"relationx_id": "99"
}
]
}
Solution
package main
import (
"encoding/json"
"fmt"
)
var inp string = `{
"results": [
{
"id": 1,
"relationx_id": "11"
},
{
"id": 2,
"relationx_id": "22"
}
],
"lookup_key": "relationx_id"
}`
var mapping string = `{
"11": "88",
"22": "99"
}`
func main() {
var inpJ map[string]interface{}
json.Unmarshal([]byte(inp), &inpJ)
// fmt.Printf("%+v\n", inpJ)
var mappingJ map[string]string
json.Unmarshal([]byte(mapping), &mappingJ)
// fmt.Printf("%+v\n", mappingJ)
lookupKey := inpJ["lookup_key"].(string)
// fmt.Printf("%+v\n", lookupKey)
for _, result := range inpJ["results"].([]interface{}) {
resultMap := result.(map[string]interface{})
for k, v := range resultMap {
if k == lookupKey {
resultMap[k] = mappingJ[v.(string)]
}
}
}
// fmt.Printf("%+v\n", inpJ)
b, _ := json.MarshalIndent(inpJ, "", " ")
fmt.Println(string(b))
}
Top comments (0)