Julia早引きノート［21］JSON、XMLファイルの入出力

###JSON、XMLファイルの入出力 (書き方例)

```ruby:note21

◆JSONファイルの入出力
　# JSONモジュールの呼び出し
　using JSON

　# JSON形式ファイルの読み取り
　JSON.parsefile(ファイル名)

　# JSON形式の文字列として出力
　JSON.json(データ)


◆XMLファイルの入出力(EzXMLの例)
　# EzXMLモジュールの呼び出し
　using EzXML

　# XMLファイルの読み取り
　xml = readxml(ファイル名)

　# XMLルートノード取得
　xmlroot = root(xml)

　# ルートノードの名前を取得
　name = nodename(xmlroot) 

　# 子要素を取得
　children = elements(xmlroot)

　# 子要素の名前を取得
　children_name = nodename.(children)

```

##解説
JSONファイルの入出力、XMLファイルの入出力それぞれについて解説します。


####(1)JSONファイルの入出力
まず初めにJSONパッケージをインストールする必要があります。
Juliaのプロンプト画面で
　` import Pkg;Pkg.add("JSON") `
と入力します。
以下のようにインポートが実行されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/80934f78-095b-680c-78e7-6b8bed78434d.png)
JuliaでJSONファイルの読み取りを実行する場合、まず
　` using JSON `
と入力してJSONモジュールの呼び出しを行います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/ef0e99d5-e0a7-5b3a-0626-72d265713f5b.png)
次にJSONファイルの読み取りを実行しますが、ここでは以下のJSON形式ファイルの読み取りを実行しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/413b4675-a640-0caa-9c0c-583d5df22df6.png)
そして、JSONファイルの読み取りコマンドを実行します。
　` JSON.parsefile(ファイル名) `
▼実行例
![Screenshot from 2020-12-28 01-31-15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/a912935a-8fa1-fbe5-7f3b-daf3d8f6183b.png)
Dict型(辞書型)でJSONファイルの内容を読み取ることができました。


:large_blue_diamond: **JuliaのDict型(辞書型)データをJSON形式の文字列に変換する**

以下のようなDict型データを宣言し、JSON形式の文字列として出力するには、
　` JSON.json(データ) `
と入力します。
▼実行例
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/f39c3b81-8b14-caa0-60d6-c3a981645cc8.png)
####(2)XMLファイルの入出力
まず初めにXMLパッケージをインストールする必要があります。
XMLパッケージには、LightXML、EzXML、LibExpatなどがあります。
ここでは、EzXMLを参考に使用します。

Juliaのプロンプト画面で
　` import Pkg;Pkg.add("EzXML") `
と入力します。
以下のようにインポートが実行されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/f92cf7bc-1508-2c12-e14e-7bc5daa7573e.png)
JuliaでXMLファイルの読み取りを実行する場合、まず
　` using EzXML `
と入力してEzXMLモジュールの呼び出しを行います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/2c6ae4a9-19c5-9fa3-ac09-79d7794f14a3.png)
次にXMLファイルの読み取りを実行しますが、ここでは以下のXML形式ファイル(test.xml)の読み取りを実行しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/d958571b-b350-c616-656c-d2a3975c35c1.png)
XMLの内容を読み取るには、以下のようなコマンドを実行します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/aad546a6-0664-980b-4051-86f984536f90.png)
　①xmlファイルを読み込みます。
　②xmlルートノードを取得します。
　③ルートノードの名前を取得します。
　④子要素を取得します。
　⑤子要素の名前を取得します。

EzXMLの機能や関数はこれ以外にもたくさんありますので、詳細は公式ドキュメントをご参照下さい。

　▼EzXMLドキュメント(Github)
　https://github.com/JuliaIO/EzXML.jl


##もくじ
[Julia早引きノート［01］変数・定数の使い方](https://qiita.com/ttabata/items/a1ada2c0cba03672e105)
[Julia早引きノート［02］算術式、演算子](https://qiita.com/ttabata/items/90900d0914fa317f652d)
[Julia早引きノート［03］複素数]
(https://qiita.com/ttabata/items/225c77a4d71fafc3e482)
[Julia早引きノート［04］正規表現](https://qiita.com/ttabata/items/8b6e4a2b7c2ca299de03)
....
<details><summary>もくじを開く</summary><div>
[Julia早引きノート［05］if文]
(https://qiita.com/ttabata/items/4f0bcff1e32f60402dfb)
[Julia早引きノート［06］ループ処理]
(https://qiita.com/ttabata/items/2a53825101b0b75fb589)
[Julia早引きノート［07］try, catch, finally]
(https://qiita.com/ttabata/items/1d6fe990526c99b65b5f)
[Julia早引きノート［08］変数の型(Int, Float, Bool, Char, String)]
(https://qiita.com/ttabata/items/2b84a826e39bfe432b62)
[Julia早引きノート［09］関数 (1)基本編]
(https://qiita.com/ttabata/items/d9b4f2728ec0dbcc6394)
[Julia早引きノート［10］関数 (2)応用編]
(https://qiita.com/ttabata/items/462e216c43d519f1969d)
[Julia早引きノート［11］Nothing型]
(https://qiita.com/ttabata/items/0e5a6b21968d8752cf0b)
[Julia早引きノート［12］複合型(Composite Type)型]
(https://qiita.com/ttabata/items/27469216a3c33101c825)
[Julia早引きノート［13］タプル]
(https://qiita.com/ttabata/items/ebe35dbfec4efbc1c29a)
[Julia早引きノート［14］リスト(Array型一次元配列)]
(https://qiita.com/ttabata/items/7528863ccbb282e8260d)
[Julia早引きノート［15］辞書(dictionary)]
(https://qiita.com/ttabata/items/77a4f1d02b51d067bfb7)
[Julia早引きノート［16］集合]
(https://qiita.com/ttabata/items/ca8137922a785122037e)
[Julia早引きノート［17］多次元配列 (1)初期化]
(https://qiita.com/ttabata/items/01fecbd14363460a27a6)
[Julia早引きノート［18］多次元配列 (2)様々な演算や関数]
(https://qiita.com/ttabata/items/f35896a5fa005fba7fbc)
[Julia早引きノート［19］多次元配列 (3)サブ配列]
(https://qiita.com/ttabata/items/045c00406fe45270b42e)
[Julia早引きノート［20］ファイル入出力]
(https://qiita.com/ttabata/items/5a99c3998060d161ace8)
[Julia早引きノート［21］JSON、XMLファイルの入出力]
(https://qiita.com/ttabata/items/65ebec11830271f9be71)
[Julia早引きノート［22］Python関数やPythonモジュールの呼び出し]
(https://qiita.com/ttabata/items/3afc8cef40d1e98a7b17)
[Julia早引きノート［23］JuliaでのMatplotlibによるグラフ描画]
(https://qiita.com/ttabata/items/96a0e172addfac690cca)
[Julia早引きノート［24］CSVFiles(DataFrameとの連携)]
(https://qiita.com/ttabata/items/51446731a703b5aca524)
[Julia早引きノート［25］線形代数演算(ベクトル・行列計算)]
(https://qiita.com/ttabata/items/5abe14d5c510e8ca0f54)
(※引き続きコンテンツを増やしていきます)
</div></details>

##関連情報

:paperclip: Julia - 公式ページ
https://julialang.org/

:paperclip: Julia - 日本語公式ドキュメント
https://julia-doc-ja.readthedocs.io/ja/latest/index.html

:paperclip: 初めてのJuliaとインストール (Windows & Linux)
https://qiita.com/ttlabo/items/b05bb43d06239f968035

:paperclip: Julia - Mathematics
https://docs.julialang.org/en/v1/base/math/


##ご意見など

ご意見、間違い訂正などございましたらお寄せ下さい。