JSONファイルをアップグレードさせたJSONSフォーマットの紹介

2023年2月8日

Javascript Tips テクノロジー

eyecatch Web-APIでメジャーフォーマットとなった、JSONフォーマット。 最近では、無駄にデータベースを使わずにJSONデータだけで事足りることが多いので非常によく使う。 そして、さらに、このJSONフォーマットを拡張させたJSONSというフォーマットを、勝手に仕様を決めて便利に使っているので、 特に便利に使えるJavascriptのコードと共に、その内容をご紹介したいと思います。

JSONフォーマット初心者に解説

仕事でプログラミングをやっている人でも、JSONデータを扱うのは、web-apiぐらいしかないという人は、意外とJSONフォーマットについて知らないというケースもあるみたいです。

JSONフォーマットという言葉の意味

JavaScript Object Notation の頭文字(?)を取った単語で、もともとはJavascriptプログラム言語から誕生したデータフォーマット。

書き方とデータ型

{ "string" : "hoge", "numeric" : 12, "boolean" : true, "array" : [1,2,"3","4"], "object" : { "hello" : "world" } } 使える型は、次の5つです。
  1. String : 文字列
  2. Numeric : 数値
  3. Boolean : 真偽値
  4. Array : 配列([...])
  5. Object : 連想配列(key:value)
Javascriptだけで使う場合は、これに、Function : 関数オブジェクトもセットできますが、ファイル出力などをするとデータとして保持できないので要注意です。

記述注意点

基本的にJSONフォーマットは、"(ダブルクォート)"を使って記述します。 参考 : [Javascript] JSON.parseで'(シングルクォート)を使うとエラーになる件 あと、クォートの中でのテキスト改行はご法度です。\nなどの改行コードを入れて対応してください。

xmlとの比較

上記のJSONデータをXMLで同じデータを作ってみると次のような感じになります。 <?xml version="1.0" encoding="UTF-8" ?> <root> <string>hoge</string> <numeric>12</numeric> <boolean>true</boolean> <array>1</array> <array>2</array> <array>3</array> <array>4</array> <object> <hello>world</hello> </object> </root> 見た目的にJSONの方が分かりやすいんですよね。 でもXMLは、namespaceなどのセキュリティ機能が使えるので、APIが未だに使われている意味も分からないでもない・・・

JSONSフォーマットとは?

JSONデータは、単にデータをテキストでファイルに保存できるフォーマットですが、データの書き換え時に排他処理をしないと、アクセス頻度が高いファイルではデータ紛失が発生する可能性があります。 これを回避刷るために、データの書き直しは行わず、データ追記のみを行うようにすると、ファイルが壊れることも無く、時系列でデータの書き込みが正常に行われ、それを履歴として扱うことも可能になる。

JSONSフォーマットサンプル

基本的には、上記のサンプルデータを1行で書いてレコード(行)毎に改行して追記していく方式です。 {"string":"hoge","numeric":12,"boolean":true,"array":[1,2,"3","4"],"object":{"hello":"world"}} {"string":"fuga","numeric":12,"boolean":true,"array":[1,2,"3","4"],"object":{"hello":"world"}} この記述をしたファイルを読み込んだ時に、改行コードでsplitをして、1行ずつパースすることで、データを取り出すことが可能になります。 最後の行が最新データなので、過去データが不要な場合は一番下のレコード行をパースするだけで十分です。 簡単に上記をファイルに保存して、最新データをパースするサンプルコードを書いてみました。 <script> (()=>{ const xhr = new XMLHttpRequest() xhr.open('get' , 'sample.jsons' , true) xhr.onload = loaded xhr.send() function loaded(res){ const lists = res.target.response.split('\n'); for(let i=lists.length-1; i>=0; i--){ if(!lists[i]){continue} const data = JSON.parse(lists[i]) console.log(data) break } } })() </script> htmlに構築したので、これをwebブラウザで開いてみると、コンソールに次のように表示されます。 { "string" : "fuga", "numeric" : 12, "boolean" : true, "array" : [1,2,"3","4"], "object" : { "hello" : "world" } } (注意)データの改行コードがLFの場合です。

あとがき

JSONSフォーマットはデータファイルを壊さず、履歴保存ができる便利フォーマットとして、使えるので、データベースのテーブル代わりに利用することができます。 データ容量が爆発的に増えた場合に、毎回大容量データを読み込まないといけないのがボトルネックになると思った場合は、 読み込み用のCGIプログラムを書いてAPI的にするのがいいでしょう。 サーバー内で、tailコマンドを叩いたり、grepを行うなど、IOを高速に利用できる方式で構築すれば、その辺のSQLなどより、激っ早のデータベースシステムを構築することができます。 SQLのテーブルをCREATEして構築するよりも遥かに高速に準備出来る上、データコピーはファイルをコピーするだけでいいので、メンテナンス作業の効率化もはかどります。 何よりデータの書き換えが手作業で行えるのも何とも運用効率が高まるポイントかもしれませんね。 データベースを使わないとシステム構築ができないプログラマーには無縁の技術ですが、SQLとの併用でシステム構築も運用もメンテナンスも効率が良くなるエンジニアリングが行えるようになるかもしれませんよ。 このJSONSを使った簡易データベースシステムというのも、実は作ってあるので、後日そちらも紹介したいと思います。

このブログを検索

ごあいさつ

このWebサイトは、独自思考で我が道を行くユゲタの少し尖った思考のTechブログです。 毎日興味がどんどん切り替わるので、テーマはマルチになっています。 もしかしたらアイデアに困っている人の助けになるかもしれません。