目前我的代码是这样的,但是不知道为什么,每次一录入完JSON数据库的第一条数据之后想要再次录入数据时就会报错,问一下这是因为什么原因?
using JSON3
struct 素材
文件名::String
编号::String
文件类型::String
细分文件类型::String
作者或发布者::String
本地存储路径::String
云端备份路径::String
密码::String
end
function 素材_to_dict(素材对象::素材)
return Dict(
"文件名" => 素材对象.文件名,
"编号" => 素材对象.编号,
"文件类型" => 素材对象.文件类型,
"细分文件类型" => 素材对象.细分文件类型,
"作者或发布者" => 素材对象.作者或发布者,
"本地存储路径" => 素材对象.本地存储路径,
"云端备份路径" => 素材对象.云端备份路径,
"密码" => 素材对象.密码
)
end
function 获取素材信息()
println("请输入文件名:")
文件名 = readline()
println("请输入编号:")
编号 = readline()
println("请输入文件类型:")
文件类型 = readline()
println("请输入细分文件类型:")
细分文件类型 = readline()
println("请输入作者或发布者:")
作者或发布者 = readline()
println("请输入本地存储路径:")
本地存储路径 = readline()
println("请输入云端备份路径:")
云端备份路径 = readline()
println("请输入密码(注意:此密码将以明文形式存储在JSON文件中,请谨慎处理):")
密码 = readline()
return 素材(文件名, 编号, 文件类型, 细分文件类型, 作者或发布者, 本地存储路径, 云端备份路径, 密码)
end
function main()
新素材 = 获取素材信息()
json_文件路径 = "素材.JSON"
if isfile(json_文件路径)
json_str = read(json_文件路径, String)
现有素材列表 = JSON3.read(json_str) :: Vector{Dict{String, Any}}
else
现有素材列表 = Vector{Dict{String, Any}}()
end
push!(现有素材列表, 素材_to_dict(新素材))
open(json_文件路径, "w") do 文件
JSON3.write(文件, 现有素材列表, pretty=true)
end
println("新素材已成功添加到数据库中。")
end
main()
报错信息一直是这样的,找不到原因:
LoadError: TypeError: in typeassert, expected Vector{Dict{String, Any}}, got a value of type JSON3.Array{JSON3.Object, Base.CodeUnits{UInt8, String}, Vector{UInt64}}
Stacktrace:
[1] main()
@ Main E:\JsonDatabase\JuliaInputTest\AppendResources.jl:61
[2] top-level scope
@ E:\JsonDatabase\JuliaInputTest\AppendResources.jl:78