如何解决如何在Nim中将对象序列转换为JSON?
我正在尝试将对象列表转换为JSON,但无法正确序列化
db.talents.aggregate([
{
$match: {
category: { $in: ["5f19359250bcf9158c6be573","5f19357b50bcf9158c6be572"] }
}
},{
$lookup: {
from: "users",as: "users",let: { userId: "$userId" },pipeline: [
{
$match: {
$expr: {
$and: [
{ $eq: ["$$userId","$_id"] },{ $eq: ["$gender","Male"] },{ $eq: ["$education","Btech"] }
// ... add you other match criteria here
]
}
}
}
]
}
},{ $match: { users: { $ne: [] } } }
])
输出为:
import marshal
type
DocItem = object of RootObj
tags: seq[string]
TextDoc = object of DocItem
text: string
TodoDoc = object of DocItem
todo: string
var docs: seq[ref DocItem]
proc to_ref[T](o: T): ref T =
result.new
result[] = o
docs.add TextDoc(text: "some doc",tags: @["help"]).to_ref
docs.add TodoDoc(todo: "some todo").to_ref
echo $$docs
当我需要它的时候
[[4312834120,{"tags": ["help"]}],[4312834280,{"tags": []}]]
还可以配置[{"text": "some doc","tags": ["help"]},{"todo": "some todo","tags": []}]
以输出漂亮的JSON吗?
解决方法
不幸的是,封送处理似乎是正确的:它显示了指向ref Object
的指针。也许您可以求助于合成而不是继承:
import marshal
type
Todo = object of RootObj
todo: string
Text = object of RootObj
text: string
DocItem = object of RootObj
tags: seq[string]
text: Text
todo: Todo
var docs: seq[DocItem] = @[]
docs.add DocItem(tags: @["help"],todo: Todo(todo: "some todo"))
docs.add DocItem(tags: @["help"],text: Text(text: "some text"))
echo $$docs
或者您可以尝试object variants。我添加了一个新的假想的“链接”类型以更好地说明它:
import marshal
type
Content = enum
tTodo
tText
tImage
DocItem = object of RootObj
tags: seq[string]
case kind: Content
of tTodo,tText:
text: string
of tLink:
url: string
var docs: seq[DocItem] = @[]
docs.add DocItem(tags: @["help"],kind: tTodo,todoVal: "some todo")
docs.add DocItem(tags: @["help"],kind: tText,textVal: "some text")
docs.add DocItem(tags: @["help"],kind: tLink,url: "http://stackoverflow.com")
echo $$docs
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。