줄리아에서 JSON 파일 읽고 쓰는 법 (JSON.jl)
개요
줄리아에서 json 파일을 다룰 수 있게 도와주는 패키지로는 JSON.jl
, JSON3.jl
, Serde.jl
등이 있다. 본 문서에서는 JSON.jl
에 대해서 설명한다.
JSON.jl
은 순수 줄리아로 짜여진 패키지로, json 파일을 파싱하고 출력하는 기능을 제공한다. 줄리아의 표준 라이브러리는 아니지만 패키지가 깃허브에서 JuliaIO 그룹에 묶여있고 관리자가 줄리아 개발자인 것으로 보아, 공식 패키지라고 봐도 무방할 듯 하다.
코드
쓰기
딕셔너리를 json 파일로
아래와 같은 코드로 딕셔너리를 json 파일로 저장할 수 있다. JSON.print
의 세번째 인자로 indent를 주면 예쁘게 저장된다.
using JSON
dict_data = Dict("name" => "Jang, Wonyoung",
"age" => 19,
"group" => "IVE",
"nicknames" => ["Wonnyo", "Gatgi", "Lucky-Vicky"])
open("wonnyo.json", "w") do io
JSON.print(io, dict_data)
end
open("pretty_wonnyo.json", "w") do io
JSON.print(io, dict_data, 4)
end
문자열을 json 파일로
아래와 같은 코드로 문자열을 json 파일로 저장할 수 있다. 기본적으로는 딕셔너리와 같은 문법이지만, 문자열은 JSON.parse()
로 한 번 파싱을 해줘야한다.마찬가지로 세번째 인자로 indent를 입력하면 예쁘게 저장된다.
str_data = """
{
"name": "Jang, Wonyoung",
"age": 19,
"group": "IVE",
"nicknames": ["Wonnyo", "Gatgi", "Lucky-Vicky"]
}
"""
open("wonnyo.json", "w") do io
JSON.print(io, JSON.parse(str_data))
end
open("pretty_wonnyo.json", "w") do io
JSON.print(io, JSON.parse(str_data), 4)
end
혹은 아래와 같이 JSON.write
함수로 문자열을 바로 json 파일로 저장할 수 있다. 이 경우에는 공백과 개행이 그대로 반영된다.
str_data = """
{
"name": "Jang, Wonyoung",
"age": 19,
"group": "IVE",
"nicknames": ["Wonnyo", "Gatgi", "Lucky-Vicky"]
}
"""
unpretty_str_data = """
{"name": "Jang, Wonyoung", "age": 19, "group": "IVE", "nicknames": ["Wonnyo", "Gatgi", "Lucky-Vicky"]}
"""
open("str2json.json", "w") do io
JSON.write(io, str_data)
end
open("unpretty_str2json.json", "w") do io
JSON.write(io, unpretty_str_data)
end
읽기
아래의 코드로 json 파일을 불러올 수 있다.
julia> using JSON
julia> dcit_from_json = JSON.parsefile("wonnyo.json")
Dict{String, Any} with 4 entries:
"name" => "Jang, Wonyoung"
"nicknames" => Any["Wonnyo", "Gatgi", "Lucky-Vicky"]
"group" => "IVE"
"age" => 19
혹은 다음과 같이 직접 IO 스트림으로 읽을 수도 있다.
julia> open("wonnyo.json", "r") do io
str_from_json = read(io, String)
data_from_str = JSON.parse(str_from_json)
end
Dict{String, Any} with 4 entries:
"name" => "Jang, Wonyoung"
"nicknames" => Any["Wonnyo", "Gatgi", "Lucky-Vicky"]
"group" => "IVE"
"age" => 19
환경
- OS: Windows11
- Version: Julia 1.11.3, JSON v0.21.4