如何在 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 字符串转换为多个结构的主要内容,如果未能解决你的问题,请参考以下文章

在 Julia Lang 中将 float 转换为 int

如何在 Spring Boot 中将输入字符串转换为 json 字符串或 json 对象

如何在pyspark中将JSON字符串转换为JSON对象

如何在android中将json对象从json数组转换为字符串数组

如何在 Kotlin 中将字符串数组 JSON 转换为 ArrayList?

如何在Javascript中将字符串转换为json