json unmarshal in gloang для сложных json данных - PullRequest
0 голосов
/ 25 апреля 2020

Я хочу json разобрать следующие данные в 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:{}
    }
}

}

Я хочу получить доступ к каждому ключу этих данных. То, что я пытался, это

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

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

После этого я не могу продолжать использовать "NewResponse". Нужна помощь. Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 25 апреля 2020

Пожалуйста, подтвердите ваш json формат

это может решить вашу цель.

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 голосов
/ 25 апреля 2020

Вы можете получить доступ к элементам NewResponse, используя клавишу:

elem:=NewResponse["0"]

Глядя на входной документ, elem - это массив объектов. В остальной части кода будут использоваться утверждения типа:

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)
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...