为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
慕婉清6462132 2021-11-01 16:10:29
我有以下格式的json{    "status_code": 200,    "status_message": "OK",    "response": {        "Messages": [            "CODE_NOT_AVAILABLE"        ],        "UnknownDevices": {            "": [                "6",                "7",                "8",                "9",                "10"            ]        }    }}正如我们看到的,我们缺少一个索引键,在 unknownDevices 之后,我试图通过以下方式使用 golan 解组这个 jsonpackage mainimport (    "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 吗?
查看完整描述

1 回答

?
红颜莎娜

TA贡献1842条经验 获得超12个赞

可能还有其他选择,但是每当您看到奇怪的 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)

}


查看完整回答
反对 回复 2021-11-01

添加回答

代码语言

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号