You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将JSON字符串插入MongoDB?Go代码报错解决方法

解决方法

问题根源

  1. 你传入的JSON字符串外层多了一对双引号,属于格式错误,不是合法的JSON对象。
  2. MongoDB Go驱动的InsertOne方法不接受原始字符串作为文档参数,需要传入可序列化为BSON的类型(比如bson.M、结构体或[]byte形式的JSON)。

修正步骤

步骤1:修复原始JSON字符串

把外层的双引号去掉,得到合法的JSON对象:

{"http_requests":[{"http_requests":{"code":"400","method":"PUT","value":89}},{"http_requests":{"code":"200","method":"PUT","value":45}}]}

步骤2:修改Go代码

将JSON字符串解析为bson.M(或直接使用[]byte),再传入InsertOne:

import (
    "context"
    "fmt"
    "log"
    "time"
    "go.mongodb.org/mongo-driver/bson"
    "go.mongodb.org/mongo-driver/mongo"
    "go.mongodb.org/mongo-driver/mongo/options"
)

func insertJson(json_value string) {
    client, err := mongo.NewClient(options.Client().ApplyURI("mongodb+srv://abc:123@cluster0.wrzj3zo.mongodb.net/?retryWrites=true&w=majority"))
    if err != nil {
        log.Fatal(err)
    }
    ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
    defer cancel() // 避免context资源泄漏
    err = client.Connect(ctx)
    if err != nil {
        log.Fatal(err)
    }
    defer client.Disconnect(ctx)

    myDatabase := client.Database("my_db")
    myCollection := myDatabase.Collection("my_collection")

    // 方法1:将JSON字符串解析为bson.M,可提前校验格式
    var doc bson.M
    err = bson.UnmarshalExtJSON([]byte(json_value), true, &doc)
    if err != nil {
        log.Fatal(err)
    }

    // 方法2:直接传入[]byte,驱动内部自动完成转换
    // doc := []byte(json_value)

    myResult, err := myCollection.InsertOne(ctx, doc)
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println(myResult.InsertedID)
}

关键说明

  • bson.UnmarshalExtJSON的第二个参数true表示支持MongoDB扩展JSON格式,适配特殊语法。
  • 解析为bson.M能提前发现JSON格式错误,避免插入时失败。
  • 必须调用cancel()释放context资源,防止内存泄漏。

内容的提问来源于stack exchange,提问作者Rachel A

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 00:50:38