# Cannot convert JLD.AssociativeWrapper to Dict

**URL:** <https://discourse.julialang.org/t/cannot-convert-jld-associativewrapper-to-dict/16835>\
**Category:** General Usage\
**Tags:** question, package\
**Created:** [October 26, 2018, 6:45pm UTC](https://discourse.julialang.org/t/cannot-convert-jld-associativewrapper-to-dict/16835 "2018-10-26T18:45:27Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![kilgoretrout](https://avatars.discourse-cdn.com/v4/letter/k/dc4da7/32.png) [@kilgoretrout](https://discourse.julialang.org/u/kilgoretrout)\
**Post date:** [October 26, 2018, 6:45pm UTC](https://discourse.julialang.org/t/cannot-convert-jld-associativewrapper-to-dict/16835/1 "2018-10-26T18:45:27Z")

</div>

New to julia so might be missing some basic things.

I’m trying to make the current version of the [JLD package](https://github.com/JuliaIO/JLD.jl) work with some older code I have and running into a type issue. The older code works with some older version of JLD but for other reasons I need to use the latest JLD and hoping to fix the old code to work with it.

The old code that is causing the problem is below. I’m not very familiar with JLD but whatever the type of `index` is after `JLD.save(...)` makes it incompatible with the array of dictionaries `indexes`. When I get to the last line `push!(indexes, index)` I get the following error:

`Cannot 'convert' an object of type getfield(JLD, Symbol("##JLD.AssociativeWrapper{Core.Any,Core.Any,Base.Dict{Core.Any,Core.Any}}#378")) to an object of type Dict`

```julia
    indexes = Dict[]
    for (i, index_filepath) in enumerate(indexes_filepaths)
        # check if index already created
        # if so, load it
        # if not, create and save it
        if !isfile(index_filepath)
            index = index_ngsim_trajectory(filepaths[i], minlength=minlength)
            JLD.save(index_filepath, "index", index)
            # write this information to an hdf5 file for use in python
            # the reason we write two files is that it's convenient to load 
            # via jld a dictionary that can be used directly
            ids_filepath = replace(index_filepath, ".jld", "-ids.h5")
            ids = convert(Array{Int}, collect(keys(index)))
            ts = Int[]
            te = Int[]
            for id in ids
                push!(ts, index[id]["ts"])
                push!(te, index[id]["te"])
            end
            h5open(ids_filepath, "w") do file
                write(file, "ids", ids)  
                write(file, "ts", ts)
                write(file, "te", te)
            end
        else
            index = JLD.load(index_filepath)["index"]
        end

        # load index
        push!(indexes, index)

```

I’m hoping I can just change the type of `indexes` to something that supports this new JLD type but so that the base type of the `indexes` array is still Dictionary-like but not sure what that would be. I tried `indexes = AbstractDict[]` but got the same error.

I also tried `indexes = JLD.AssociativeWrapper{Core.Any, Core.Any, Dict{Core.Any, Core.Any}}[]` since `JLD.AssociativeWrapper` looks a lot like a dictionary but this gave rise to some other errors.

`Cannot 'convert' an object of type getfield(JLD, Symbol("##JLD.AssociativeWrapper{Core.Any,Core.Any,Base.Dict{Core.Any,Core.Any}}#378")) to an object of type JLD.AssociativeWrapper{Any,Any,Dict{Any,Any}}`

I tried to write my own `convert` to call before `push!(indexes, index)` below but it still says no method matching convert, maybe my `convert` is wrong?

```julia
function convert(::Type{Dict}, x::JLD.AssociativeWrapper{K,V,T}) where {K,V,T}
    keys = x.keys
    values = x.values
    Dict(zip(keys, values))
end

```

Any help is greatly appreciated!
