JSONファイルを書き出すには

◆PROCESSING 逆引きリファレンス

 カテゴリー:ファイル操作

JSONファイルを書き出すには

【概要】

PROCESSINGでは単純なテキストファイル以外にも、CSV形式のファイルやJSON形式のファイルを扱うことが可能です。

本記事ではJSON形式のファイルを書き出す方法について紹介したいと思います。JSON形式のファイルから値を取得する方法については「JSONファイルを読み込むには」記事を参照してください。

JSONは(複数の)JSONオブジェクト、または(複数の)JSON配列として表現されます。JSONオブジェクトとJSON配列を組み合わせることも可能です。

※普通の配列やオブジェクトとJSONで扱う配列やオブジェクトを区別するため、JSONで扱うものをJSON配列、JSONオブジェクトと表現しています。正確な表現ではないことをお断りしておきます。

PROCESSINGにはJSONオブジェクトを扱うJSONObjectクラスと、JSON配列を扱うJSONArrayクラスがあり、それぞれに値を追加してファイルに保存する事が可能です。

命令 用途
1 setString() 文字列を追加します
2 setInt() 整数を追加します
3 setFloat() 浮動小数点数を追加します
4 setBoolean() 真偽値を追加します
5 setJSONArray() JSON配列を追加します
6 setJSONObject() JSONオブジェクトを追加します
7 append() 文字列、整数、真偽値、符号小数点、JSON配列、JSONオブジェクトを追加します。JSON配列でのみ利用可能です
8 remove() 項目を削除します。JSON配列でのみ利用可能です

上記命令で値を操作したJSONオブジェクトまたはJSON配列は、saveJSONObject()命令、またはsaveJSONArray()命令でファイルに保存可能です。

注意としては、保存されるJSONファイルの文字コードは UTF-8 となる事です。

またファイルにパスを指定しなかった場合は、デフォルトでは スケッチファイルと同じフォルダ(Dataフォルダ配下ではない)にファイルが作成されます。

 

【詳細】

JSON配列を作成する

JSON配列を作成するJSONArray jarray = new JSONArray() ;

jarray : 作成したJSON配列インスタンス

JSON配列は JSONArray クラスを new すれば作成する事が可能です。簡単ですね。

 

JSON配列に文字列をセットする

文字列をセットするJSONArray jarray = jarray . setString( int index, String add ) ;

jarray : JSON配列インスタンス
index : セットする位置
add : セットする文字列

new で作成したJSON配列の指定位置に、文字列をセットします。JSON配列の先頭にセットする場合は、セットする位置(index)は  0 となります。

セットする位置は 0 から始めなくてもエラーにはなりません。また飛び番(0,1,3など)もOKですが、その場合は該当位置にJSONのnull値(null)がセットされます。

また戻り値がJSONArrayなので、連続して命令を記述する事も可能です(下記の例2の箇所)。

<作成されたJSONファイル例>

上記例では index を 1 から始めているため、先頭に null値がセットされています。
同じように1の次に2を指定せずに3を指定しているため、1番の文字列と3番の文字列の間にも null値が入っています。

たくさんの文字列を連続でセットしたい場合は、上記サンプルの例2のように記述することも可能です。

 

JSON配列に整数をセットする

整数をセットするJSONArray jarray = jarray . setInt( int index, int add ) ;

jarray : JSON配列インスタンス
index : セットする位置
add : セットする整数

new で作成したJSON配列の指定位置に、整数をセットします。JSON配列の先頭にセットする場合は、セットする位置(index)は  0 となります。

セットする位置は 0 から始めなくてもエラーにはなりません。また飛び番(0,1,3など)もOKですが、その場合は該当位置にJSONのnull値(null)がセットされます。

また戻り値がJSONArrayなので、連続して命令を記述する事も可能です(下記の例2の箇所)。

<作成されたJSONファイル例>

上記例では index の 1 を飛ばして指定しているため、該当位置に null値がセットされています。

たくさんの値を連続でセットしたい場合は、上記サンプルの例2のように記述することも可能です。

 

JSON配列に浮動小数点値をセットする

浮動小数点値をセットするJSONArray jarray = jarray . setFloat( int index, float fadd ) ;
JSONArray jarray = jarray . setDouble( int index, double dadd ) ;

jarray : JSON配列インスタンス
index : セットする位置
fadd / dadd : セットする浮動小数点値

new で作成したJSON配列の指定位置に、浮動小数点値をセットします。JSON配列の先頭にセットする場合は、セットする位置(index)は  0 となります。

セットする位置は 0 から始めなくてもエラーにはなりません。また飛び番(0,1,3など)もOKですが、その場合は該当位置にJSONのnull値(null)がセットされます。

また戻り値がJSONArrayなので、連続して命令を記述する事も可能です(下記の例2の箇所)。

<作成されたJSONファイル例>

上記例では index の 1 を飛ばして指定しているため、該当位置に null値がセットされています。

たくさんの値を連続でセットしたい場合は、上記サンプルの例2のように記述することも可能です。

注意としては float や double などの浮動小数点は誤差が発生する事です。

例えば上記サンプルでは  “3.14”、”4.999” という値をセットしていますが、実際のファイルでは誤差を伴った値で記述されています。

 

JSON配列に値を追加する

値を追加するJSONArray jarray = jarray . append( String add ) ;
JSONArray jarray = jarray . append( int add ) ;
JSONArray jarray = jarray . append( float add ) ;
JSONArray jarray = jarray . append( boolean add ) ;
JSONArray jarray = jarray . append( JSONArray add ) ;
JSONArray jarray = jarray . append( JSONObject add ) ;

jarray : JSON配列インスタンス
add : セットする値(String, int, float, boolean, JSONArray, JSONObject )

new で作成したJSON配列に、各値をセットします。append() 命令は現在の配列の最後尾から指定された値を自動追加していきます。

また戻り値がJSONArrayなので、連続して命令を記述する事も可能です。

<作成されたJSONファイル例>

double型の値は利用できませんが、値を連続でセットしたい場合は 、それぞれの型に応じた set命令を使うよりは append() 命令を使うほうが便利ですね。

 

JSON配列から値を削除する

値を削除するJSONArray jarray = jarray . remove( int index ) ;

jarray : JSON配列インスタンス
index : 削除する位置

値がセットされたJSON配列の指定位置から、値を削除して前詰めします。

指定された位置に配列が存在しないと例外エラーとなるので注意してください。

<作成されたJSONファイル例>

上記例では、最初に
[ 0 ]:”先頭だよ”
[ 1 ]:”1番目だよ”
[ 2 ]:”2番目だよ”
という構造のJSON配列を作成し、この1番目(”1番目だよ”という値)を削除しています。

よって結果は
[ 0 ]:”先頭だよ”
]:”2番目だよ”
となります。

削除された結果、もともと2番目にあった “2番目だよ” という値の順番が前詰めされて1番目の項目になる事に注意してください。

 

JSON配列をファイルに書き込む

ファイルに書き込むboolean ret = saveJSONArray( JSONArray jarray, String filename) ;
boolean ret = saveJSONArray( JSONArray jarray, String filename, String option) ;

ret : 戻り値(false = 失敗)
jarray : 書き込むJSON配列
filename : ファイル名
option : オプション。”indent=N” か “compact” を指定。OPTIONは省略可能で N は 0以上の数字文字(例:”indent=4″)

値をセットしたJSON配列をファイルに書き込みます。

filenameにパスを指定しなかった場合、スケッチと同一フォルダ(Dataフォルダ配下ではない)にファイルが作成されます。

ファイルの文字コードはUTF-8になる事に注意してください。また同名のファイルがある場合は上書き更新される事にも注意が必要です。

<作成されたJSONファイル例>

OPTIONは省略可能です。省略すると “indent=2” が指定されたものとして動作するようです。

indent指定は、各項目の前に指定した数の半角スペースをつけます。作成したファイルを人間が読む場合は、可読性を上げるために適切に指定すると良いでしょう。

一方で作成したファイルをコンピュータだけで処理する場合は、可読性を犠牲にしてファイルサイズを小さくする目的で compact 指定をする事も可能です。

compact を指定すると、項目に余分なスペースや改行をつけないで書き出します。

以下は上記サンプルで出力したファイルをサクラエディタで開いた様子です。

 

JSONオブジェクトを作成する

JSONオブジェクトを作成するJSONObject jobject= new JSONObject() ;

jobject : 作成したJSONオブジェクトインスタンス

JSONオブジェクトは JSONObjectクラスを new すれば作成する事が可能です。簡単ですね。

 

JSONオブジェクトに文字列をセットする

文字列をセットするJSONObject jobject = jobject.setString( String key, String value) ;

jobject : 作成したJSONオブジェクトインスタンス
key : キー文字列
value : セットする文字列

new で作成したJSONオブジェクトに、KEYとペアになった文字列をセットします

<作成されたJSONファイル例>

一度セットした項目を削除したい場合は、削除したい項目のKEYに null をセットします。

上記サンプルなら、「僧侶」というKEYをもつ項目に null をセットしていますので、「空海」という値は書き込み対象外となります。

またオブジェクトのファイルへのセットは順番通り行われる保証がない事にも注意してください。上記では、たまたま “勇者” のあとに “魔女” の項目が出来上がっていますが、この順番が逆転する事もあります。

オブジェクトへのアクセスはKEYで行われるため、ファイル上の順番は保証されないのですね。

 

JSONオブジェクトに浮動小数点値をセットする

浮動小数点値をセットするJSONObject jobject = jobject.setFloat( String key, float fvalue) ;
JSONObject jobject = jobject.setDouble( String key, double dvalue) ;

jobject : 作成したJSONオブジェクトインスタンス
key : キー文字列
fvalue / dvalue : セットする浮動小数点値

new で作成したJSONオブジェクトに、KEYとペアになった浮動小数点値をセットします

<作成されたJSONファイル例>

一度セットした項目を削除したい場合は、削除したい項目のKEYに null をセットします。

上記サンプルなら、「体重」というKEYをもつ項目に null をセットしていますので、「64.3」という値は書き込み対象外となります。

注意としては float や double などの浮動小数点は誤差が発生する事です。

またsetDouble()やsetFloat()で値に null を指定することはできません。値を削除したい場合は setString() を利用してください。

 

JSONオブジェクトをファイルに書き込む

ファイルに書き込むboolean ret = saveJSONObject(  JSONObject jobject, String filename) ;
boolean ret = saveJSONObject( JSONObject  jobject, String filename, String option) ;

ret : 戻り値(false = 失敗)
jobject : 書き込むJSONオブジェクト
filename : ファイル名
option : オプション。”indent=N” か “compact” を指定。OPTIONは省略可能で N は 0以上の数字文字(例:”indent=4″)

値をセットしたJSONオブジェクトをファイルに書き込みます。

filenameにパスを指定しなかった場合、スケッチと同一フォルダ(Dataフォルダ配下ではない)にファイルが作成されます。

ファイルの文字コードはUTF-8になる事に注意してください。また同名のファイルがある場合は上書き更新される事にも注意が必要です。

<作成されたJSONファイル例>

OPTIONは省略可能です。省略すると “indent=2” が指定されたものとして動作するようです。

indent指定は、各項目の前に指定した数の半角スペースをつけます。作成したファイルを人間が読む場合は、可読性を上げるために適切に指定すると良いでしょう。

一方で作成したファイルをコンピュータだけで処理する場合は、可読性を犠牲にしてファイルサイズを小さくする目的で compact 指定をする事も可能です。

compact を指定すると、項目に余分なスペースや改行をつけないで書き出します。

以下は上記サンプルで出力したファイルをサクラエディタで開いた様子です。

 

 

【関連記事】

 


サンプルプログラム

応用例:

JSONオブジェクトとJSON配列は混在させることも可能です。

上記例ではベースとなるJSONオブジェクトに子供となるJSONオブジェクトとJSON配列を追加して書き込んでいます。

実際のビジネスシーンでは、もっと複雑なJSONファイルを作成する事もあるかとは思いますが、紹介した命令を組み合わせれば対応できると思います。

<作成されたJSONファイル例>

 

 


PROCESSING逆引きリファレンス一覧 へ戻る

本ページで利用しているアイコン画像は、下記サイト様より拝借しております。各画像の著作権は、それぞれのサイト様および作者にあります。