如何在Julia中将JSON-String转换为多个struct



我有以下JSON-String:

jsonString="""{
"struct1": {
"arg1": 218650.27,
"arg2": 90
},
"struct2": {
"arg1": 346.4
}
}"""

我已经知道如何将JSON- string转换为结构体,但不是像上面的JSON文件那样的多个结构体。在这种情况下,是否有任何Pkg帮助,或者我必须拆分JSON文件?

您可以使用JSON3解析JSON以获得对象字典:

julia> u = JSON3.read_json_str(jsonString)
JSON3.Object{Base.CodeUnits{UInt8, String}, Vector{UInt64}} with 2 entries:
:struct1 => {…
:struct2 => {…
julia> keys(u)
KeySet for a JSON3.Object{Base.CodeUnits{UInt8, String}, Vector{UInt64}} with 2 entries. Keys:
:struct1
:struct2

那么每个元素都可以作为单独的Dict读取(这里我将其转换为Dict以提高可读性):

julia> Dict(u[:struct2])
Dict{Symbol, Any} with 1 entry:
:arg1 => 346.4
julia> Dict(u[:struct1])
Dict{Symbol, Any} with 2 entries:
:arg1 => 2.1865e5
:arg2 => 90
现在假设您有一个专用的Juliastruct来填充这些值,例如:
Base.@kwdef struct MyStruct
arg1::Float64 = 0.0
arg2::Int = 0
end

如果你现在想将JSON存储在这样的结构中,你可以这样做:

julia> [MyStruct(;u[key]...) for key in keys(u)]
2-element Vector{MyStruct}:
MyStruct(218650.27, 90)
MyStruct(346.4, 0)

最新更新