Rの場合

データを読み込みます。

# import libraries
library(jsonlite) # import JSON files
library(purrr) # functional programming
library(dplyr) # data wrangling
# import the data
raw_json <- jsonlite::fromJSON("jargons.json") 

raw_jsonはリストのリストです。レベル1を表示します。 $マークはリストを表しています。

10の用語のリストのそれぞれに9のリストがあることがわかります。

# show the structure
str(raw_json, max.level = 1) 
## List of 10
##  $ Python              :List of 9
##  $ R                   :List of 9
##  $ Julia               :List of 9
##  $ Java                :List of 9
##  $ JavaScript          :List of 9
##  $ library             :List of 9
##  $ package             :List of 9
##  $ statistical analysis:List of 9
##  $ terminal            :List of 9
##  $ virtual environment :List of 9

RStudioでは次のコードでtree状に表示することができます。Global Environmentで見ることもできます。

View(raw_json)

mapで各項目のリストを取得します。

mapは、リストのエレメントを順に関数のアーギュメントとして実行し、新たなリストを作成する関数で、基本的な形式は、map(リスト, 関数)です。

10件の用語のそれぞれのキー“japanese”に対応する値の一覧を取得するコードは次です。

map(raw_json, "japanese")

“japanese”は文字列ではなく、関数のショートカットです。

map(raw_json, "japanese")
## $Python
## [1] "パイソン"
## 
## $R
## [1] "R"
## 
## $Julia
## [1] "Julia"
## 
## $Java
## [1] "Java"
## 
## $JavaScript
## [1] "JavaScript"
## 
## $library
## [1] "ライブラリ"
## 
## $package
## [1] "パッケージ"
## 
## $`statistical analysis`
## [1] "統計解析"
## 
## $terminal
## [1] "ターミナル"
## 
## $`virtual environment`
## [1] "仮想環境"

mapは出力の形式により次の種類があります。

データ・フレームとして、1レベルのリストの名重複を除いた値の件数データのタイプを表示するコードはしたです。

“.x”は、パイプ演算子%>%の左のリストを順に代入するものです。

raw_json %>% map_df(~(data.frame(n_distinct = n_distinct(.x),
                                 class = class(.x))),
                    .id = "variable")
##                variable n_distinct class
## 1                Python          8  list
## 2                     R          8  list
## 3                 Julia          7  list
## 4                  Java          9  list
## 5            JavaScript          8  list
## 6               library          6  list
## 7               package          7  list
## 8  statistical analysis          6  list
## 9              terminal          7  list
## 10  virtual environment          7  list

Pythonの場合

次に解説されています。

How to Iterate Through a Dictionary in Python

データをDictionaryとして読み込みます。Rの場合と同じファイルです。

import json
with open('jargons.json') as f:
  data = json.load(f)
print(data)
## {'Python': {'categories': 'languages', 'japanese': 'パイソン', 'meaning': '大人気の汎用言語。', 'frequency': 5, 'difficulty': 3, 'priority': 5, 'comments': 'Excelのような表(データ・フレーム)を扱う場合は、ライブラリPandasを使用。', 'link1': 'http://www.mishou.be/2020/11/06/pythonr-%e3%82%a4%e3%83%b3%e3%82%b9%e3%83%88%e3%83%bc%e3%83%ab%e3%81%aa%e3%81%97%e3%81%a7python%e3%81%a8r%e3%82%92%e5%90%8c%e6%99%82%e3%81%ab%e5%ad%a6%e3%81%b6-google-colaboratory-ver-1/', 'link2': 'NaN'}, 'R': {'categpries': 'languages', 'japanese': 'R', 'meaning': '統計解析に最適な言語。機械学習もできる。', 'frequency': 5, 'difficulty': 3, 'priority': 5, 'comments': 'ライブラリTidyverseから学べばわかりやすい。RStudioを使うのがお勧め。', 'link1': 'http://www.mishou.be/2020/11/06/pythonr-%e3%82%a4%e3%83%b3%e3%82%b9%e3%83%88%e3%83%bc%e3%83%ab%e3%81%aa%e3%81%97%e3%81%a7python%e3%81%a8r%e3%82%92%e5%90%8c%e6%99%82%e3%81%ab%e5%ad%a6%e3%81%b6-google-colaboratory-ver-1/', 'link2': 'https://rstudio.com/'}, 'Julia': {'categories': 'languages', 'japanese': 'Julia', 'meaning': 'Pythonに比較される言語。', 'frequency': 3, 'difficulty': 3, 'priority': 3, 'comments': 'Pythonより処理が速い。コードがわかりやすい。Junoで実行するのがお勧め。', 'link1': 'http://www.mishou.be/2020/02/18/juliajuno-juliajuno%e5%85%a5%e9%96%801_%e3%82%a4%e3%83%b3%e3%82%b9%e3%83%88%e3%83%bc%e3%83%ab%e3%81%a8%e5%a7%8b%e3%82%81%e6%96%b9/', 'link2': 'NaN'}, 'Java': {'categories': 'languages', 'japanese': 'Java', 'meaning': '伝統ある汎用言語。コードは直感的でわかりやすいが、やたら長い。', 'frequency': 5, 'difficulty': 3, 'priority': 4, 'comments': '初心者の説明ですので誤っているかもしれません。', 'link1': 'http://www.mishou.be/2020/10/08/java-%e3%81%af%e3%81%98%e3%82%81%e3%81%a6%e5%ad%a6%e3%81%b6-ver-1/', 'link2': 'NaN'}, 'JavaScript': {'categories': 'languages', 'japanese': 'JavaScript', 'meaning': 'Web関連言語で大人気。', 'frequency': 5, 'difficulty': 3, 'priority': 5, 'comments': '初心者の説明ですので誤っているかもしれません。', 'link1': 'http://www.mishou.be/2021/01/08/javascript-%e3%81%af%e3%81%98%e3%82%81%e3%81%a6%e5%ad%a6%e3%81%b6_%e6%ba%96%e5%82%99-ver-1/', 'link2': 'NaN'}, 'library': {'categories': 'terms', 'japanese': 'ライブラリ', 'meaning': '特定の作業に必要な道具のセット。Installは一度、importは作業ごとに必要。', 'frequency': 5, 'difficulty': 2, 'priority': 5, 'comments': 'NaN', 'link1': 'NaN', 'link2': 'NaN'}, 'package': {'categories': 'terms', 'japanese': 'パッケージ', 'meaning': 'ライブラリをいれる箱。ライブラリは箱に入れて運ばれ、インストールされる。', 'frequency': 5, 'difficulty': 2, 'priority': 5, 'comments': 'Packageをインストールするのとlibraryをインストールするのは同じ。', 'link1': 'NaN', 'link2': 'NaN'}, 'statistical analysis': {'categories': 'statistics', 'japanese': '統計解析', 'meaning': '統計学に基づくデータの集計やグラフ作成。', 'frequency': 4, 'difficulty': 5, 'priority': 4, 'comments': 'NaN', 'link1': 'NaN', 'link2': 'NaN'}, 'terminal': {'categories': 'computer', 'japanese': 'ターミナル', 'meaning': 'コードでファイルを操作する。ファイルの作成、削除、移動、書き込みなどができる。', 'frequency': 4, 'difficulty': 3, 'priority': 4, 'comments': 'MacではApplicationsのUtilitiesのTerminal.appをクリックすると開く。Windowではコマンド・プロンプト。', 'link1': 'NaN', 'link2': 'NaN'}, 'virtual environment': {'categories': 'computer', 'japanese': '仮想環境', 'meaning': 'Pythonでは仮想環境構築が普通。Pythonやライブラリは仮想環境ごとにインストール。', 'frequency': 4, 'difficulty': 2, 'priority': 4, 'comments': 'Rで仮想環境を構築することは少ない。構築する場合はライブラリかAnacondaを使う。', 'link1': 'NaN', 'link2': 'NaN'}}

Dictionaryのキー(用語)の一覧を表示します。

For loopsを使用する場合は次です。10件の用語が含まれていることがわかります。Dataはdictionaryですが、iterationではキーだけのリストです。

for key in data:
  print(key)
## Python
## R
## Julia
## Java
## JavaScript
## library
## package
## statistical analysis
## terminal
## virtual environment

あるいは、簡単に.keys()でキーのリストを取得することもできます。

data.keys()
## dict_keys(['Python', 'R', 'Julia', 'Java', 'JavaScript', 'library', 'package', 'statistical analysis', 'terminal', 'virtual environment'])

キーだけでなく値も得たい場合は、item()を用います。

キー(用語)とそれに対応する値のリストの中のキー“japanese”に対応する値を表示する、つまりキー(用語)と“japanese”の値を表示するコードは次です。

for key, value in data.items():
  print(key, value['japanese'])
## Python パイソン
## R R
## Julia Julia
## Java Java
## JavaScript JavaScript
## library ライブラリ
## package パッケージ
## statistical analysis 統計解析
## terminal ターミナル
## virtual environment 仮想環境