Julia 结构中的 JSON 别名如何与 Go 中的一样?

Posted

技术标签:

【中文标题】Julia 结构中的 JSON 别名如何与 Go 中的一样?【英文标题】:How does one alias JSON in a Julia struct like in Go? 【发布时间】:2021-09-26 04:48:34 【问题描述】:

在 GoLang 中,可以使用 JSON 别名来进行序列化和序列化/反序列化:

 type Response struct 
      TaskID     string     `json:"task_id"`
 ...
 
 ...
 func Run(task structs.Task) 
      msg := structs.Response
      msg.TaskID = task.TaskID
      resp, _ := json.Marshal(msg)
 ...
 

json:"task_id" 是上面 GoLang 示例的 Response 结构中 string 类型的结构字段 TaskID 的别名。此别名可用于将结构数据序列化为 JSON,如 json.Marshal(msg) 中所示

如何在 Julia 中实现这一点?

【问题讨论】:

您能解释一下“别名”是什么意思吗? 我编辑了问题以进一步解释 json 别名。 【参考方案1】:

你可以使用StructTypes.names函数:

using JSON3
using StructTypes

Base.@kwdef mutable struct Foo
    task_id::Int = 0
    bar::String  = ""
end
StructTypes.StructType(::TypeFoo) = StructTypes.Mutable()
StructTypes.names(::TypeFoo) = ((:task_id, :TASKID), )

有了这些定义,序列化和反序列化看起来像这样

julia> f1 = JSON3.read("\"TASKID\": 1, \"bar\": \"hello\"", Foo)
Foo(1, "hello")

julia> JSON3.write(f1)
"\"TASKID\":1,\"bar\":\"hello\""

【讨论】:

以上是关于Julia 结构中的 JSON 别名如何与 Go 中的一样?的主要内容,如果未能解决你的问题,请参考以下文章

20220713GO语音的结构体和面向对象

如何使用 Go 的类型别名让自己的模型与 protobufs 一起工作?

如何别名 quit() 退出?

如何从Spark中的聚合结构对象中删除“ col1”别名?

[Go] golang http下返回json数据

julia系列2:数据结构