Как записать массив bson в ResponseWriter - PullRequest
0 голосов
/ 18 января 2019

Я пишу код в GoLang.В рамках этого я сгенерировал массив bson, запросив коллекцию в MongoDB, используя github.com/mongodb/mongo-go-driver/mongo, github.com/mongodb/mongo-go-driver/bson.Мне нужно написать этот ответ на http.ResponseWriter.Когда я пытаюсь сделать это, используя json.Marshal(BsonArrayReceived), ответ, записанный в ResponseWriter, имеет структуру документа, отличную от структуры документа JSON, хранящейся в MongoDB.Итак, я хотел знать правильный способ записи результатов запроса в ResponseWriter.

Допустим, есть два документа, которые соответствуют моим критериям запроса - кошка, собака

cat := bson.D{{"Animal", "Cat"}}
dog := bson.D{{"Animal", "Dog"}}

Итак, результирующий массив bson, который я создаю, будет выглядеть примерно так:

response := bson.A
response = append(response, cat)
response = append(response, dog)

Мой текущий код, который не работал, ниже

writer.Header().Set("Content-Type", "application/json")    
json.err := json.Marshal(response)
writer.Write(json)

Ожидаемый результат будет

[{"Animal":"Cat"},{"Animal":"Dog"}]

Фактический вывод, который я получаю,

[{{"Key":"Animal"},{"Value":"Cat"}},{{"Key":"Animal"},{"Value":"Dog"}}]

Так что мой вопросКак мне написать в ResponseWriter, чтобы сохранить структуру массива документов JSON.Я предпочитаю не использовать пользовательские Marshal / UnMarshal, так как это означает, что решение является конкретным и требует изменений, если я изменю структуру JSON

1 Ответ

0 голосов
/ 21 января 2019

Используйте bons.M вместо.

cat := bson.M{"Animal": "Cat"}
dog := bson.M{"Animal": "Dog"}
response := bson.A{}
response = append(response, cat)
response = append(response, dog)
writer.Header().Set("Content-Type", "application/json")
json, _ := json.Marshal(response)
writer.Write(json)
...