неверный запрос на чтение массива при выполнении UnmarshalExtJSON - PullRequest
0 голосов
/ 07 мая 2019

Я пытаюсь разархивировать расширенный JSON в структуру, используя UnmarshalExtJSON из go.mongodb.org/mongo-driver/bson

Это дает мне ошибку: invalid request to read array

Как я могу разархивировать эти данные вмоя структура?

MVCE:

package main

import (
    "fmt"

    "go.mongodb.org/mongo-driver/bson"
)

func main() {
    var json = "{\"data\":{\"streamInformation\":{\"codecs\":[\"avc1.640028\"]}}}"
    var workflow Workflow
    e := bson.UnmarshalExtJSON([]byte(json), false, &workflow)
    if e != nil {
        fmt.Println("err is ", e)
        // should print "err is  invalid request to read array"
        return
    }
    fmt.Println(workflow)
}

type Workflow struct {
    Data WorkflowData `json:"data,omitempty"`
}

type WorkflowData struct {
    StreamInformation StreamInformation `json:"streamInformation,omitempty"`
}

type StreamInformation struct {
    Codecs []string `json:"codecs,omitempty"`
}

Я использую go версию 1.12.4 windows / amd64

1 Ответ

1 голос
/ 07 мая 2019

Вы отменяете использование пакета bson, но вы используете json теги struct field. Измените их на bson теги struct field, и это должно работать для вас:

package main

import (
    "fmt"

    "go.mongodb.org/mongo-driver/bson"
)

func main() {
    var json = "{\"data\":{\"streamInformation\":{\"codecs\":[\"avc1.640028\"]}}}"
    var workflow Workflow
    e := bson.UnmarshalExtJSON([]byte(json), false, &workflow)
    if e != nil {
        fmt.Println("err is ", e)
        return
    }
    fmt.Println(workflow)
}

type Workflow struct {
    Data WorkflowData `bson:"data,omitempty"`
}

type WorkflowData struct {
    StreamInformation StreamInformation `bson:"streamInformation,omitempty"`
}

type StreamInformation struct {
    Codecs []string `bson:"codecs,omitempty"`
}

с выводом:

paul@mac:bson$ ./bson
{{{[avc1.640028]}}}
paul@mac:bson$ 
...