如何在Golang中将JSON对象数组插入MongoDB

3

我的JSON长这样:

[
  {
    "key1": 1,
    "key2": "val2"
  },
  {
    "key1": 2,
    "key2": "val2"
  }
]

这个json是以字符串格式呈现的,我想将json数组中的对象作为单独的记录插入到mongodb中。我参考了https://labix.org/mgo,但没有找到足够的关于上述用例的示例。希望能听取您的想法并找到解决方案。


2
你试过什么了吗?你一定有些代码。无论多烂 - 我们都曾经是初学者。 - Markus W Mahlberg
3个回答

11

解析 JSON 到 []interface{} 并将结果 插入 数据库。假设 c 是一个 mgo.Collectiondata 是包含 JSON 值的 []byte,请使用以下代码:

var v []interface{}
if err := json.Unmarshal(data, &v); err != nil {
   // handle error
}
if err := c.Insert(v...); err != nil {
   // handle error
}

2
在这个例子中,我将存储混合数组。
test_string := '[[1,"a","b",2,"000000",[[1,2,3],[1,2,3]],"\"x","[y","'z",[[1,2,3],[1,2,3]]]]' 将其作为json存储在mongodb中: {datum: [[1,"a","b",2,"000000",[[1,2,3],[1,2,3]],"\"x","[y","'z",[[1,2,3],[1,2,3]]]]}
package main

import (
    "strings"
    "context"
    "encoding/json"
    "fmt"
    "log"
    "net/http"
    
    "go.mongodb.org/mongo-driver/bson"
    "go.mongodb.org/mongo-driver/bson/primitive"
)



type datum2 struct {
    Datum interface{} `json:datum`
}





var userCollection = db().Database("goTest").Collection("users") // get collection "users" from db() which returns *mongo.Client

func typeinterface2mongo() {
    
    
    var datum2 datum2_instance
    var interfacevalue []interface{}
    
    test_string := `[[1,"a","b",2,"000000",[[1,2,3],[1,2,3]],"\"x","[y","'z",[[1,2,3],[1,2,3]]]]`
    if err := json.Unmarshal([]byte(test_string), &interfacevalue); err != nil {
        fmt.Println(err)
        return
    }
    
    fmt.Println(test_string)
    fmt.Println(interfacevalue)
    datum2_instance.Datum=interfacevalue
    userCollection.InsertOne(context.TODO(), datum2_instance)
    fmt.Println(datum2_instance)
    fmt.Println(datum2_instance.Datum)  
}



1
如果您已经有了JSON数据,请从第2步开始。 如果您有XML数据,首先需要使用此软件包(“github.com/basgys/goxml2json”)将其转换为JSON格式。
 type JsonFileResponse struct {
    JsonData string        `bson:"JsonData " json:"JsonData"`
}

step 1: jsonData, err := xml2json.Convert(xml)
        if err != nil {
            panic("getting error while converting xml to json",err)
        }

step 2: session need to open by using your mongodb credentials.

    collection := session.DB("database name").C("Collection Name")
    err = collection.Insert(JsonFileResponse{JsonData :json.String()})
    if err != nil {
        log.Fatal(err)
    } 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接