TOML
TOML.jl 是一个 Julia 标准库,用于解析和编写 TOML v1.0 文件。
解析 TOML 数据
julia> using TOML
julia> data = """
[database]
server = "192.168.1.1"
ports = [ 8001, 8001, 8002 ]
""";
julia> TOML.parse(data)
Dict{String, Any} with 1 entry:
"database" => Dict{String, Any}("server"=>"192.168.1.1", "ports"=>[8001, 8001…
要解析文件,请使用 TOML.parsefile
。如果文件存在语法错误,则会抛出异常
julia> using TOML
julia> TOML.parse("""
value = 0.0.0
""")
ERROR: TOML Parser error:
none:1:16 error: failed to parse value
value = 0.0.0
^
[...]
还有其他版本的解析函数(TOML.tryparse
和 [TOML.tryparsefile
]),它们不会在解析器错误时抛出异常,而是返回一个包含信息的 TOML.ParserError
julia> using TOML
julia> err = TOML.tryparse("""
value = 0.0.0
""");
julia> err.type
ErrGenericValueError::ErrorType = 14
julia> err.line
1
julia> err.column
16
导出数据到 TOML 文件
TOML.print
函数用于将数据打印(或序列化)成 TOML 格式。
julia> using TOML
julia> data = Dict(
"names" => ["Julia", "Julio"],
"age" => [10, 20],
);
julia> TOML.print(data)
names = ["Julia", "Julio"]
age = [10, 20]
julia> fname = tempname();
julia> open(fname, "w") do io
TOML.print(io, data)
end
julia> TOML.parsefile(fname)
Dict{String, Any} with 2 entries:
"names" => ["Julia", "Julio"]
"age" => [10, 20]
键可以根据某些值进行排序
julia> using TOML
julia> TOML.print(Dict(
"abc" => 1,
"ab" => 2,
"abcd" => 3,
); sorted=true, by=length)
ab = 2
abc = 1
abcd = 3
对于自定义结构体,请传递一个将结构体转换为支持类型的函数
julia> using TOML
julia> struct MyStruct
a::Int
b::String
end
julia> TOML.print(Dict("foo" => MyStruct(5, "bar"))) do x
x isa MyStruct && return [x.a, x.b]
error("unhandled type $(typeof(x))")
end
foo = [5, "bar"]
参考文献
TOML.parse
— 函数parse(x::Union{AbstractString, IO})
parse(p::Parser, x::Union{AbstractString, IO})
解析字符串或流 x
,并返回结果表(字典)。在失败时抛出 ParserError
。
另请参阅 TOML.tryparse
。
TOML.parsefile
— 函数parsefile(f::AbstractString)
parsefile(p::Parser, f::AbstractString)
解析文件 f
并返回结果表(字典)。在失败时抛出 ParserError
。
另请参阅 TOML.tryparsefile
。
TOML.tryparse
— 函数tryparse(x::Union{AbstractString, IO})
tryparse(p::Parser, x::Union{AbstractString, IO})
解析字符串或流 x
,并返回结果表(字典)。在失败时返回 ParserError
。
另请参阅 TOML.parse
。
TOML.tryparsefile
— 函数tryparsefile(f::AbstractString)
tryparsefile(p::Parser, f::AbstractString)
解析文件 f
并返回结果表(字典)。在失败时返回 ParserError
。
另请参阅 TOML.parsefile
。
TOML.print
— 函数print([to_toml::Function], io::IO [=stdout], data::AbstractDict; sorted=false, by=identity)
将 data
作为 TOML 语法写入流 io
。如果关键字参数 sorted
设置为 true
,则根据关键字参数 by
给定的函数对表进行排序。
支持以下数据类型:AbstractDict
、AbstractVector
、AbstractString
、Integer
、AbstractFloat
、Bool
、Dates.DateTime
、Dates.Time
、Dates.Date
。请注意,整数和浮点数需要分别可转换为 Float64
和 Int64
。对于其他数据类型,请传递函数 to_toml
,该函数接受数据类型并返回支持类型的值。
TOML.Parser
— 类型Parser()
TOML Parser
的构造函数。请注意,在大多数情况下,不需要显式创建 Parser
,而是直接使用 TOML.parsefile
或 TOML.parse
。但是,使用显式解析器将重用一些内部数据结构,如果解析大量的小文件,这将有利于性能。
TOML.ParserError
— 类型ParserError
当解析失败时,从 tryparse
和 tryparsefile
返回的类型。它包含(除其他外)以下字段
pos
,发生错误时字符串中的位置table
,到目前为止已成功解析的结果type
,错误类型,对于不同类型的错误不同