golang устанавливает новое значение для объекта с типом map [string] interface {} - PullRequest
0 голосов
/ 27 апреля 2018

У меня есть json str, который я разбираю вот так.

var bdoc interface{}
bson.UnmarshalJSON([]byte(gjson.Get(*str, "user").String()), &bdoc)

мой bdoc имеет интерфейс типа map [string] {}. Когда я хочу получить ключ от моей карты, я делаю это так:

bdoc.(map[string]interface{})["pk"]

Но как я могу установить новое значение для этого ключа "pk"? Я хочу преобразовать это bdoc ["pk"] = "1234567". Новое значение будет не типа интерфейса, а типа строки.

1 Ответ

0 голосов
/ 27 апреля 2018

Вы можете установить строку и значение оставаться как тип строки

package main

import (
    "fmt"
    "log"
)

func main() {

    var bdoc interface{}
    aMap, ok := bdoc.(map[string]interface{})
    if !ok {
       log.Fatalf("Failed to cast %T", bdoc)
    }
    //depending on JSON settting pk number may have json.Numbe or float64
    fmt.Prinf("%v  %T\n", aMap["pk"], aMap["pk"])
   aMap["pk"] ="1234"
    fmt.Prinf("%v  %T\n", aMap["pk"], aMap["pk"])

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...