Skip to content

Instantly share code, notes, and snippets.

@silgon
Last active April 18, 2024 01:31
Show Gist options
  • Star 7 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save silgon/0ba43e00e0749cdf4f8d244e67cd9d6a to your computer and use it in GitHub Desktop.
Save silgon/0ba43e00e0749cdf4f8d244e67cd9d6a to your computer and use it in GitHub Desktop.
How to Read and Write JSON files in julia
import JSON
###################
### Write data ####
###################
# dictionary to write
dict1 = Dict("param1" => 1, "param2" => 2,
"dict" => Dict("d1"=>1.,"d2"=>1.,"d3"=>1.))
# pass data as a json string (how it shall be displayed in a file)
stringdata = JSON.json(dict1)
# write the file with the stringdata variable information
open("write_read.json", "w") do f
write(f, stringdata)
end
###################
### Read data #####
###################
# create variable to write the information
dict2 = Dict()
open("write_read.json", "r") do f
global dict2
dicttxt = readall(f) # file information to string
dict2=JSON.parse(dicttxt) # parse and transform data
end
# print both dictionaries
println(dict1)
println(dict2)
@Aether59
Copy link

Aether59 commented Aug 4, 2017

The 'readall' call fails with 'ERROR: UndefVarError: readall not defined'. If 'readall' is replaced by 'readstring', it works fine.

@ronascentes
Copy link

Very helpfull. Thanks for sharing.

@JailsonLiberato
Copy link

How to get the value, because is showing in my console: Dict{Any,Any}()

@stephenjfox
Copy link

I think the readall(f) call was supposed to be JSON.readall

@hyrodium
Copy link

hyrodium commented Feb 27, 2020

# create variable to write the information
dict2 = Dict()
open("write_read.json", "r") do f
    global dict2
    dicttxt = read(f,String)  # file information to string
    dict2=JSON.parse(dicttxt)  # parse and transform data
end

and

# create variable to write the information
dict2 = Dict()
open("write_read.json", "r") do f
    global dict2
    dict2=JSON.parse(f)  # parse and transform data
end

worked!

It seems the name of text-read function has been changed at least twice: readall -> readstring -> read
JuliaLang/julia#14660
JuliaLang/julia#22864

@vincent-picaud
Copy link

Julia v1.5 update: for reading data I use

stringdata=join(readlines("/path/data.json"))
dict=JSON.parse(stringdata)

@tomasBjornfot
Copy link

Using Julia v1.5 and the Pipe module you can read the json file to a dict in one line:

dict = @pipe "write_read.json" |> open |> read |> String |> JSON.parse

@ms10596
Copy link

ms10596 commented Apr 21, 2021

Using Julia v1.6, I was able to read the json file in a very simple way.

dict = "write_read.json" |> open |> JSON.parse
OR
dict = JSON.parse(open("write_read.json"))

@rben01
Copy link

rben01 commented May 6, 2021

I think JSON.parsefile("filename.json") is the right way to do this now?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment