Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

sometimes dicts are passed to constructors as `Dict{String,Any}`

Aperta
#23 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
3/5
Tempo stimato
1-2 giorni
Idoneità per principianti
35/100
Tipo di issue
Bug
Chiarezza
Abbastanza chiara
Stato di attività
Ferma
Stack tecnologico
julia
Ambito
tooling

Direzione di ricerca

Inizia eseguendo il Julia MWE e seguendo la chiamata al costruttore in StructTypes.jl:267 insieme al percorso di lettura di JSON3 in structs.jl:342. Confronta il modo in cui Outer e Inner ricevono le chiavi del dizionario, quindi verifica che il caso di costruzione annidata segnalato non richieda più costruttori separati per Dict{String,Any} e Dict{Symbol,Any}.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

I started out thinking this only happened for nested types, but as I set out to make a MWE, I got even more confused. Here it is

using JSON3, StructTypes

struct Inner
    a::Int
end
Inner(dct) = Inner(dct[:a])

StructTypes.StructType(::Type{Inner}) = StructTypes.DictType()

struct Outer
    I::Inner
end
Outer(dct) = Outer(dct[:I])

StructTypes.StructType(::Type{Outer}) = StructTypes.DictType()


json = JSON3.write(Dict(:I=>Dict(:a=>1)))
JSON3.read(json, Outer)

gives me

ERROR: LoadError: KeyError: key :I not found
Stacktrace:
 [1] getindex at ./dict.jl:467 [inlined]
 [2] Outer(::Dict{String,Any}) at /home/expandingman/src/scrap.jl:13 (repeats 2 times)
 [3] #construct#2 at /home/expandingman/.julia/packages/StructTypes/CpLmq/src/StructTypes.jl:267 [in
lined]
 [4] construct at /home/expandingman/.julia/packages/StructTypes/CpLmq/src/StructTypes.jl:267 [inlin
ed]
 [5] read(::StructTypes.DictType, ::Base.CodeUnits{UInt8,String}, ::Int64, ::Int64, ::UInt8, ::Type{
Outer}, ::Type{Symbol}, ::Type{Any}; kw::Base.Iterators.Pairs{Union{},Union{},Tuple{},NamedTuple{(),
Tuple{}}}) at /home/expandingman/.julia/packages/JSON3/LtYDK/src/structs.jl:342
 [6] read at /home/expandingman/.julia/packages/JSON3/LtYDK/src/structs.jl:285 [inlined]
 [7] #read#30 at /home/expandingman/.julia/packages/JSON3/LtYDK/src/structs.jl:279 [inlined]
 [8] read at /home/expandingman/.julia/packages/JSON3/LtYDK/src/structs.jl:279 [inlined]
 [9] read(::String, ::Type{Outer}; kw::Base.Iterators.Pairs{Union{},Union{},Tuple{},NamedTuple{(),Tu
ple{}}}) at /home/expandingman/.julia/packages/JSON3/LtYDK/src/structs.jl:34
 [10] read(::String, ::Type{Outer}) at /home/expandingman/.julia/packages/JSON3/LtYDK/src/structs.jl
:33
 [11] top-level scope at /home/expandingman/src/scrap.jl:19
 [12] include(::String) at ./client.jl:457
 [13] top-level scope at REPL[3]:1
in expression starting at /home/expandingman/src/scrap.jl:19

Usually I would hit this kind of error with Inner where it would try to construct from Dict("a"=>1), I don't know why I suddenly have this problem with the outer one.

As a workaround, it seems that right now one has to define constructors for both Dict{String,Any} and Dict{Symbol,Any} which seems wrong.

Lingua principale
Julia
Stelle
86
Fork
21
Metriche di merge delle PR
Nessuna PR unita negli ultimi 30g

Preparare l'ambiente

Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di JuliaData/StructTypes.jl

Tutte le issue di JuliaData/StructTypes.jl

Issue simili

Altre issue su Julia

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.