猿问

在golang中解析没有索引名称的json

我有以下格式的json


{

    "status_code": 200,

    "status_message": "OK",

    "response": {

        "Messages": [

            "CODE_NOT_AVAILABLE"

        ],

        "UnknownDevices": {

            "": [

                "6",

                "7",

                "8",

                "9",

                "10"

            ]

        }

    }

}

正如我们看到的,我们缺少一个索引键,在 unknownDevices 之后,我试图通过以下方式使用 golan 解组这个 json


package main


import (

    "encoding/json"

    "fmt"

)


type pushWooshResponse struct {

    Status     int    `json:"status_code"`

    Status_msg string `json:"status_message"`

    Response   response

}


type response struct {

    Message        []string `json:"Messages"`

    UnknownDevices devices

}


type devices struct {

    Udevices []string `json:""`

}


func main() {

    itemInfoR := `{"status_code":200,"status_message":"OK","response":{"Messages":["CODE_NOT_AVAILABLE"],"UnknownDevices":{"devices":["6","7","8","9","10"]}}}`

    itemInfoBytes := []byte(itemInfoR)

    var ItemInfo pushWooshResponse

    er := json.Unmarshal(itemInfoBytes, &ItemInfo)

    if er != nil {

        fmt.Println("Error", er.Error())

    } else {

        fmt.Println(ItemInfo)

    }

}

输出是


{200 OK {[CODE_NOT_AVAILABLE] {[]}}}

除了最后一部分外,一切都正常,我无法解开这一部分。你能帮我把 json 的最后一部分 umarhal 吗?


慕婉清6462132
浏览 192回答 1
1回答

红颜莎娜

可能还有其他选择,但是每当您看到奇怪的 JSON 时,您总是可以通过实现json.Unmarshaler和/或json.Marshaler.也许是这样的:type devices struct {    Udevices []string}func (d *devices) UnmarshalJSON(b []byte) error {    var x map[string][]string    err := json.Unmarshal(b, &x)    if err == nil {        // perhaps check that only a single        // key exists in the map as well        d.Udevices = x[""]    }    return err}func (d devices) MarshalJSON() ([]byte, error) {    x := map[string][]string{"": d.Udevices}    return json.Marshal(x)}
随时随地看视频慕课网APP

相关分类

Go
我要回答