プログラミング言語のJSON操作まとめ

プログラミング

JSONは外部のAPIや他システムと連携する際のデータフォーマットとしてよく用いられるフォーマットです。

プログラム内では受け取ったJSONデータをシステム内に取り込んだり、その逆を行ったりすることがあるため、JSONデータの操作が必要となります。

本ブログではこれまでに、JavaScript、Python、Java、Ruby、GoにおけるJSON操作について解説してきました。

本記事では、各言語JSON操作を比較しながらまとめていきます。

各言語における違いが分かったり、書き方を忘れてしまったときの復習用としても役立つ内容になっていますので、ぜひ最後までご覧いただければと思います。

本記事の最後に、各言語のソースコードを含む詳細内容を確認できる、関連ページへのリンクも用意しておきますので、気になる方はチェックしてみてください。

プログラミング言語のJSON操作まとめ

各言語のJSON操作として以下の内容を採り上げます。

  • JSONを扱うモジュール・パッケージ・ライブラリ
  • JSONファイルの読み込み
  • 文字列からJSONオブジェクトへの変換
  • JSONオブジェクトから文字列への変換
  • JSONデータの参照
  • JSONデータの追加
  • JSONデータの削除

なお、言語によってはJSONデータの内容を予め用意したクラスや構造体などの定義にマッピングさせる方法と、マップや配列などにマッピングさせる方法があります。

本記事では自由にデータの追加や削除が可能な後者の方法をまとめていきます。

JSONを扱うモジュール・パッケージ・ライブラリ

言語 JSONを扱うモジュール・パッケージ・ライブラリ
JavaScript
  • 標準で提供される組込みオブジェクトのJSONを利用
Python
  • 標準ライブラリのjsonモジュールを利用
Java
  • 外部ライブラリを利用(本記事ではJacksonとGsonにおける操作を解説)
Ruby
  • 標準ライブラリのJSONモジュールを利用
Go
  • 標準で提供されるencoding/jsonパッケージを利用

多くの言語ではJSONデータを扱うことが考慮され、JSONデータを操作する機能が標準で提供されているため、特別なことをする必要がありません。

Javaだけは、標準機能ではJSONデータを扱うことが困難なため、多くの場合において外部ライブラリに頼ることになります。

JSONファイルの読み込み

言語 JSONファイルの読み込み
JavaScript
  • ファイルから文字列として読み込んだ後に、JSON.parseで変換
  • JSONのオブジェクトはJavaScriptのObjectとして変換される
  • JSONの配列はJavaScriptのArrayとして変換される
Python
  • json.loadにファイルハンドルを渡して変換
  • JSONのオブジェクトはPythonの辞書(dict)として変換される
  • JSONの配列はPythonのリストとして変換される
Java(Jackson)
  • FileオブジェクトをObjectMapperのreadTreeメソッドに渡して変換
  • JSONのオブジェクトはJacksonのObjectNodeとして変換される
  • JSONの配列はJacksonのArrayNodeとして変換される
Java(Gson)
  • ファイルから文字列として読み込んだ後に、GsonのfromJsonメソッドに渡して変換
  • JSONのオブジェクトはGsonのJsonObjectとして変換される
  • JSONの配列はGsonのJsonArrayとして変換される
Ruby
  • JSON.loadにファイルハンドルを渡して変換
  • JSONのオブジェクトはRubyのハッシュとして変換される
  • JSONの配列はRubyの配列として変換される
Go
  • ファイルから文字列として読み込んだ後に、json.Unmarshalに渡して変換
  • JSONのオブジェクトはGoのmapとして変換される
  • JSONの配列はGoのarrayとして変換される

ファイルから読み込んだJSONデータをプログラム内で扱うには、JSONオブジェクトとして変換が必要になります。

変換方法はファイル情報を変換メソッドに直接指定する方法や、一旦文字列として読み込んで変換する方法が提供されています。

変換した情報は各言語が持つデータ構造に変換されますが、JSONはデータ形式がkeyとvalueを持つ構造になっているため、多くの言語はマップや連想配列に変換されてプログラムから扱えるようになります。

文字列からJSONオブジェクトへの変換

言語 文字列からJSONオブジェクトへの変換
JavaScript
  • JSON.parseを利用する
Python
  • json.loadsを利用する
Java(Jackson)
  • ObjectMapperクラスのreadTreeを利用する
Java(Gson)
  • GsonクラスのfromJsonを利用する
Ruby
  • JSON.parseを利用する
Go
  • json.Unmarshalを利用する

文字列からJSONオブジェクトへの変換方法は、各言語で専用のメソッドが提供されています。

JSONオブジェクトから文字列への変換

言語 JSONオブジェクトから文字列への変換
JavaScript
  • 1行の文字列として変換するには、JSON.stringifyを利用する
  • 改行を含む文字列として変換するには、JSON.stringifyのオプションにインデントを指定する
Python
  • 1行の文字列として変換するには、json.dumpsを利用する
  • 改行を含む文字列として変換するには、json.dumpsのオプションにインデントを指定する
Java(Jackson)
  • 1行の文字列として変換するには、toStringメソッドを利用する
  • 改行を含む文字列として変換するには、toPrettyStringメソッドを利用する
Java(Gson)
  • 1行の文字列として変換するには、toStringメソッドを利用する
  • 改行を含む文字列として変換するには、GsonBuilderにsetPrettyPrintingを指定する
Ruby
  • 1行の文字列として変換するには、JSON.dumpまたはJSON.generateを利用する
  • 改行を含む文字列として変換するには、JSON.pretty_generateを利用する
Go
  • 1行の文字列として変換するには、json.Marshalを利用する
  • 改行を含む文字列として変換するには、json.MarshalIndentを利用する

JSONオブジェクトから文字列への変換方法も、各言語で専用のメソッドが提供されています。

表示やファイル出力などする場合に、改行を入れて見やすくするための方法も提供されています。

JSONデータの参照

言語 JSONデータの参照
JavaScript
  • 文字列や数値の参照は、直接キー名を指定する
  • 配列の参照は、キー名とインデックスをネストして指定する
  • オブジェクトの参照は、キー名をネストして指定する
Python
  • 文字列や数値の参照は、直接キー名を指定する
  • 配列の参照は、キー名とインデックスをネストして指定する
  • オブジェクトの参照は、キー名をネストして指定する
Java(Jackson)
  • 文字列や数値の参照は、getメソッドにキー名を指定する
  • 配列の参照は、getメソッドにキー名やインデックスをメソッドチェーン形式で指定する
  • オブジェクトの参照は、getメソッドにキー名をメソッドチェーン形式で指定する
Java(Gson)
  • 文字列や数値の参照は、getメソッドにキー名を指定する
  • 配列の参照は、getメソッドにキー名に指定してJsonArrayに変換後、さらにgetメソッドにインデックスを指定する
  • オブジェクトの参照は、getメソッドにキー名を指定してJsonObjectに変換後、さらにgetメソッドにキー名を指定する
Ruby
  • 文字列や数値の参照は、直接キー名を指定する
  • 配列の参照は、キー名とインデックスをネストして指定する
  • オブジェクトの参照は、キー名をネストして指定する
Go
  • 文字列や数値の参照は、直接キー名を指定する
  • 配列の参照は、キー名を指定してarrayに変換後、インデックスを指定する
  • オブジェクトの参照は、キー名をしてmapに変換後、キー名を指定する

JSONデータの参照は、ネストするデータ構造に従ってアクセスします。

型に厳格なJavaとGoは、取得した情報を該当する型に変換しながらアクセスする必要があるため手間がかかります。

JSONデータの追加

言語 JSONデータの追加
JavaScript
  • 文字列や数値の追加は、直接キー名と値を指定する
  • 配列への追加は、pushを使って追加するJSONを指定する
  • オブジェクトへの追加は、キー名をネストさせて追加するJSONを指定する
Python
  • 文字列や数値の追加は、直接キー名と値を指定する
  • 配列への追加は、appendを使って追加するJSONを指定する
  • オブジェクトへの追加は、キー名をネストさせて追加するJSONを指定する
Java(Jackson)
  • 文字列や数値の追加は、ObjectNode型にキャストして、putメソッドにキー名と値を指定する
  • 配列への追加は、ArrayNode型にキャストして、addを使って追加するJSONを指定する
  • オブジェクトへの追加は、ObjectNode型にキャストして、setメソッドにキー名と追加するJSONを指定する
Java(Gson)
  • 文字列や数値の追加は、addPropertyメソッドにキー名と値を指定する
  • 配列への追加は、JsonArray型に変換して、addメソッドに追加するJSONを指定する
  • オブジェクトへの追加は、JsonObject型に変換して、addメソッドにキー名と追加するJSONを指定する
Ruby
  • 文字列や数値の追加は、直接キー名と値を指定する
  • 配列への追加は、pushを使って追加するJSONを指定する
  • オブジェクトへの追加は、キー名をネストさせて追加するJSONを指定する
Go
  • 文字列や数値の追加は、直接キー名と値を指定する
  • 配列への追加は、既存の内容と追加する内容を結合した新たな配列を作成して置き換える
  • オブジェクトへの追加は、キー名をネストさせて追加するJSONを指定する

JSONオブジェクトへのデータ追加方法は、追加対象となる型によって方法が異なります。

文字列や数値の追加であれば、どの言語も対象となるオブジェクトに対して、キー名を指定して値となるJSONを指定する方法となります。

配列への追加に関しては、Goは既存データに直接追加が出来ないため、少し手間がかかります。

JSONデータの削除

言語 JSONデータの削除
JavaScript
  • deleteに削除対象のキー名を指定する
  • 配列はspliceを使って削除する
Python
  • delに削除対象のキー名や配列のインデックスを指定する
Java(Jackson)
  • removeメソッドに削除対象のキー名やインデックスを指定する
Java(Gson)
  • removeメソッドに削除対象のキー名やインデックスを指定する
Ruby
  • deleteメソッドに削除対象のキー名やインデックスを指定する
Go
  • delete関数に削除対象のキー名を指定する
  • 配列は削除対象を除外した新たな配列で置き換える

JSONオブジェクトのデータ削除方法は、各言語ともに削除メソッドや関数によって行います。

JavaScriptの配列は、deleteだと要素がundefinedとしてそのまま残ってしまうため、spliceを使う方法をおすすめします。

Goの配列は直接削除ができないため、追加と同じく新たな配列を作って置き換える方法となります。

JSONデータを自由に扱えるようになろう

最近では、JSON形式のデータをプログラム内だけではなく、ログやインフラ等の設定情報、保存用データなど様々な部分で使われることが増えてきました。

プログラマブルなデータフォーマットとして保存することで、プログラムで自由に解析をしやすくする意図があります。

ちょっとしたJSON解析プログラムを作ることで、今までExcelで集計していた業務を効率化することが出来たり、プログラムによってチェックすることで作業ミスを防止することも出来ます。

こうした日頃の作業をプログラマブルに出来ないか考えてみるのも良いと思います。

 

今回はJSON操作について各言語における操作方法を比較しながらまとめました。

ソースコードも含めた各言語の詳細が記述されている、関連ページヘのリンクを以下にまとめておきますので、気になる方はチェックしてみてください。

以上、参考になれば幸いです。

各言語のJSON操作記事

JavaScriptのJSON操作【プログラミング初心者向け教材】
JSONは外部のAPIや他システムと連携する際のデータフォーマットとしてよく用いられるフォーマットです。 プログラム内でJSONを扱うには、文字列からオブジェクトへの変換やその逆などの操作が必要となります。 本記事では、JavaScriptにおけるJSONデータの操作についてまとめます。
PythonのJSON操作【プログラミング初心者向け教材】
JSONは外部のAPIや他システムと連携する際のデータフォーマットとしてよく用いられるフォーマットです。 プログラム内でJSONを扱うには、文字列からオブジェクトへの変換やその逆などの操作が必要となります。 本記事では、PythonにおけるJSONデータの操作についてまとめます。
JavaのJSON操作【プログラミング初心者向け教材】
JSONは外部のAPIや他システムと連携する際のデータフォーマットとしてよく用いられるフォーマットです。 プログラム内でJSONを扱うには、文字列からオブジェクトへの変換やその逆などの操作が必要となります。 本記事では、JavaにおけるJSONデータの操作についてまとめます。
RubyのJSON操作【プログラミング初心者向け教材】
JSONは外部のAPIや他システムと連携する際のデータフォーマットとしてよく用いられるフォーマットです。 プログラム内でJSONを扱うには、文字列からオブジェクトへの変換やその逆などの操作が必要となります。 本記事では、RubyにおけるJSONデータの操作についてまとめます。
GoのJSON操作【プログラミング初心者向け教材】
JSONは外部のAPIや他システムと連携する際のデータフォーマットとしてよく用いられるフォーマットです。 プログラム内でJSONを扱うには、文字列からオブジェクトへの変換やその逆などの操作が必要となります。 本記事では、GoにおけるJSONデータの操作についてまとめます。

コメント

タイトルとURLをコピーしました