Je veux json unmarshal les données suivantes dans Golang:

{
RESPONSE : {
    CODE : "123"
    NEW_RESPONSE :{
            0:[
                {
                    key1:val1,
                    key2:val2

                },
                {
                    key3:val3,
                    key4:val4
                }
            ]
            1:[
                {
                    key5:val5,
                    key6:val6,
                    key7:val7

                },
                {
                    key31:val31,
                    key42:val42
                }
            ]
            2:{
                key8:val8,
                key9:val9,
                key1-:val10
            }
            3:{}
    }
}

}

Je veux accéder à toutes les clés de ces données. Ce que j'essayais c'est

type testData struct{
Code string  `json:"CODE"`
NewResponse  map[string]interface{} `json:"NEW_RESPONSE"`}

type GetData struct{
TestResponse testData `json:"RESPONSE"`}

Après cela, je ne peux plus utiliser "En réponse". Besoin d'aide. Merci d'avance.

-2
Kashish Goyal 25 avril 2020 à 20:44

2 réponses

Meilleure réponse

Vous pouvez accéder aux éléments de NewResponse à l'aide de la clé:

elem:=NewResponse["0"]

En regardant le document d'entrée, elem est un tableau d'objets. Le reste du code utilisera des assertions de type:

if arr, ok:=elem.([]interface{}); ok {
   // arr is a JSON array
   objElem:=arr[0].(map[string]interface{})
   for key,value:=range objElem {
      // key: "key1"
      // value: "val1"
      val:=value.(string)
      ...
   }
} else if obj, ok:=elem.(map[string]interface{}); ok {
   // obj is a JSON object
   for key, val:=range obj {
      // key: "key1"
      value:=val.(string)
   }
}
1
Burak Serdar 25 avril 2020 à 19:14

Veuillez valider votre format json

Cela peut résoudre votre objectif.

package main

import (
    "encoding/json"
    "fmt"
)

    func main() {
    Json := `{
"RESPONSE" : {
    "CODE" : "123",
    "NEW_RESPONSE" :{
            "0":{
            "s" : 1,
            "s1" :2,
            "s3": 3 
            }                      
    }
}
}`

// Declared an empty interface
var result map[string]interface{}

// Unmarshal or Decode the JSON to the interface.
err := json.Unmarshal([]byte(Json), &result)    
if err != nil{      
fmt.Println("Err : ",err)
}else{
fmt.Println(result)
    }
}
0
Rajat Mishra 25 avril 2020 à 20:37