如何处理文档中不一致的json字段
我目前有一个很大的JSON文件,它必须存储在后端(mongodb&Go),并在前端使用。我想知道文档的第三个字段是否应该类似于“子类别”,而不是第二个字段中的运动名称,或者这是否可能,因为我认为这可能很难在后端语言中建模和反序列化,因为不一致 样本:如何处理文档中不一致的json字段,json,mongodb,go,Json,Mongodb,Go,我目前有一个很大的JSON文件,它必须存储在后端(mongodb&Go),并在前端使用。我想知道文档的第三个字段是否应该类似于“子类别”,而不是第二个字段中的运动名称,或者这是否可能,因为我认为这可能很难在后端语言中建模和反序列化,因为不一致 样本: { "_id" : ObjectId("55c"), "Sport" : "Athletics ", "Athletics" : { ["Men's Individual", "Women's Individual", "Mix
{
"_id" : ObjectId("55c"),
"Sport" : "Athletics ",
"Athletics" : {
["Men's Individual", "Women's Individual", "Mixed Relay"]
}
}
{
"_id" : ObjectId("56c"),
"Sport" : "Tennis",
"Tennis" : ["Men's singles", "Women's singles", "Men's doubles", "Women's doubles", "Mixed doubles"]
}
{
"_id" : ObjectId("57c"),
"Sport" : "Swimming",
"Swimming" : {
"Men" : ["4×100 m relay", "4×200 m freestyle relay"],
"Women" : ["4×100 m relay", "4×200 m freestyle relay"]
}
}
您可以使用以下方法完成此操作:
我同意这个小声音告诉你要使用“子类别”,而不是试图处理不一致的类型。此外,你应该将游泳中的“男性”和“女性”子类别结合起来,就像你在网球和田径中所做的那样。这将让您更好地利用encoding/json(和mgo/bson)的映射特性,但我不会将其称为“后端语言”问题——一致的数据类型也会使您的js(和其他客户端代码)更好 根据jsonlint,json是无效的。应该是{“_id”:ObjectId(“55c”),“Sport”:“Athletics”,“Athletics”:[“男单”、“女单”、“混合接力”]}如何创建json。生成文档的是另一个应用程序吗?不回答您的问题,但可能会有所帮助
package main
import (
"encoding/json"
"fmt"
"log"
)
func main() {
type Color struct {
Space string
Point json.RawMessage // delay parsing until we know the color space
}
type RGB struct {
R uint8
G uint8
B uint8
}
type YCbCr struct {
Y uint8
Cb int8
Cr int8
}
var j = []byte(`[
{"Space": "YCbCr", "Point": {"Y": 255, "Cb": 0, "Cr": -10}},
{"Space": "RGB", "Point": {"R": 98, "G": 218, "B": 255}}
]`)
var colors []Color
err := json.Unmarshal(j, &colors)
if err != nil {
log.Fatalln("error:", err)
}
for _, c := range colors {
var dst interface{}
switch c.Space {
case "RGB":
dst = new(RGB)
case "YCbCr":
dst = new(YCbCr)
}
err := json.Unmarshal(c.Point, dst)
if err != nil {
log.Fatalln("error:", err)
}
fmt.Println(c.Space, dst)
}
}