如何在 Julia 中将 JSON 字符串转换为多个结构
Posted
技术标签:
【中文标题】如何在 Julia 中将 JSON 字符串转换为多个结构【英文标题】:how to convert a JSON-String to multiple Structs in Julia 【发布时间】:2021-11-09 20:12:07 【问题描述】:我有以下 JSON 字符串:
jsonString="""
"struct1":
"arg1": 218650.27,
"arg2": 90
,
"struct2":
"arg1": 346.4
"""
我已经知道如何将 JSON-String 转换为结构,但不知道像上面的 JSON 文件那样的多重结构。 在这种情况下是否有任何 Pkg 有帮助,或者我必须拆分 JSON 文件?
【问题讨论】:
我之前没听说过multiple struct。它是什么?你试过了吗:using JSON; JSON.parse(yourstring)
?
为什么不将其读入Dict
,然后使用values(dict)
取出结构
我认为您的术语有问题。结构是复合类型,您不是在运行时从字符串创建它们,而是在编译时从代码创建它们。您几乎肯定应该创建一个Dict
,这就是JSON.parse
所做的。
【参考方案1】:
您可以使用JSON3
解析 JSON 以获取对象字典:
julia> u = JSON3.read_json_str(jsonString)
JSON3.ObjectBase.CodeUnitsUInt8, String, VectorUInt64 with 2 entries:
:struct1 => …
:struct2 => …
julia> keys(u)
KeySet for a JSON3.ObjectBase.CodeUnitsUInt8, String, VectorUInt64 with 2 entries. Keys:
:struct1
:struct2
每个元素都可以作为单独的Dict
读取(为了便于阅读,我将其转换为Dict
):
julia> Dict(u[:struct2])
DictSymbol, Any with 1 entry:
:arg1 => 346.4
julia> Dict(u[:struct1])
DictSymbol, Any with 2 entries:
:arg1 => 2.1865e5
:arg2 => 90
现在假设您有一个专门的 Julia struct
来填写这些值,例如:
Base.@kwdef struct MyStruct
arg1::Float64 = 0.0
arg2::Int = 0
end
如果您现在想将 JSON 存储在这样的结构中,您可以这样做:
julia> [MyStruct(;u[key]...) for key in keys(u)]
2-element VectorMyStruct:
MyStruct(218650.27, 90)
MyStruct(346.4, 0)
【讨论】:
以上是关于如何在 Julia 中将 JSON 字符串转换为多个结构的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Spring Boot 中将输入字符串转换为 json 字符串或 json 对象
如何在android中将json对象从json数组转换为字符串数组