おくれまして明けまして。
おめでとうございます。
もう、1月終わりです。
そんなこんな時期に明けまして投稿です。
さて!今回の話題は!
JSONです。
社会人学生時代、卒論で自作エディタからJSONを編集するエディタを作ったのですが。
それ以来です。
先ず。
サンプルがある割には、結構苦労する情報が多いLazarusのJSON。
色々、苦労しましたが、編集できるようになりました。
判ればこっちのもので、結構、使いやすくて便利です。
最下行にソースを置いておきます。
必要なのは、ボタン3つ、エディット2つ、メモ1つです。
Usesに以下のユニットを追加します。
fpjson
jsonConf
コンポーネント名は変更していません。
変数名は以下の通り。
JsonData : TJSONData;
JsonObj : TJSONObject;
JsonArray : TJSONArray;
先ず、
JsonObj := TJSONObject.Create;
で、JSONをCreateします。
次に、
JsonObj.Add( 項目名,値 );
で、項目を足していきます。
Arrayを使う場合は、以下の感じ。
JsonArray := TJSONArray.Create;
JsonArray.Add( 値 );
JsonObj.Add( 項目名, JsonArray );
で、宣言し、値を追加し、格納します。
テキストに落として保存する時は、
JsonData := JsonObj;
String変数 := JsonData.FormatJSON;
検索する時は、
JsonData.FindPath( 項目名 ).AsString
例えば、
「Title」という項目名があった場合は、
項目名に’Title’と入れます。
Arrayの場合は、Title[番号]
例:Title[3]
になります。
変更したい場合は、
先ず、
GetJSON()したものを、TJSONObject()で変換を掛けます。
こんな感じ。
JsonData := GetJSON( Memo1.Text );
JsonObj := TJSONObject( JsonData );
その次に、値を入れ替えます。
JsonObj.Strings[ 項目名 ] := 値;
あとは、以下の手順で普通にStringに格納し、保存するだけです。
JsonData := JsonObj;
String変数 := JsonData.FormatJSON;
やっと、基本をつかめた感じではありますが、結構、便利です。
気軽にJSON扱えるとなると、これは便利ですね。
ありがたやありがたや。
参考にしたサイトは以下。
https://forum.lazarus.freepascal.org/index.php?topic=40272.0
https://wiki.freepascal.org/fcl-json
https://forum.lazarus.freepascal.org/index.php?topic=47298.0
http://lazplanet.blogspot.com/2014/09/a-simple-json-parsing-example.html
以下がソースになります。
それでは。
unit Unit1;{$mode objfpc}{$H+} interface uses Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls,fpjson,jsonConf; type { TForm1 } TForm1 = class(TForm) Button1: TButton; Button2: TButton; Button3: TButton; Edit1: TEdit; Edit2: TEdit; Memo1: TMemo; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); private public end; var Form1: TForm1; implementation {$R *.lfm} { TForm1 } procedure TForm1.Button1Click(Sender: TObject); var JsonData : TJSONData; JsonObj : TJSONObject; JsonArray : TJSONArray; begin JsonObj := TJSONObject.Create; JsonObj.Add( ‘Title’,’Sample’ ); JsonObj.Add( ‘Pages’,’4′ ); JsonArray := TJSONArray.Create; JsonArray.Add( ‘No1’ ); JsonArray.Add( ‘No2’ ); JsonArray.Add( ‘No3’ ); JsonArray.Add( ‘No4’ ); JsonObj.Add( ‘Catalog’, JsonArray ); JsonData := JsonObj; memo1.Lines.Text := JsonData.FormatJSON; end; procedure TForm1.Button2Click(Sender: TObject); var JsonData: TJSONData; begin try JsonData := GetJSON( Memo1.Text ); Showmessage( JsonData.FindPath( Edit1.Text ).AsString); except ShowMessage( ‘JSONのパスが違います。’ ) ; end; end; procedure TForm1.Button3Click(Sender: TObject); var JsonData: TJSONData; JsonObj : TJSONObject; begin try JsonData := GetJSON( Memo1.Text ); JsonObj := TJSONObject( JsonData ); JsonObj.Strings[ Edit1.Text ] := Edit2.Text; JsonData := JsonObj; Showmessage( JsonData.FindPath( Edit1.Text ).AsString); memo1.Lines.Text := JsonData.FormatJSON; except ShowMessage( ‘JSONのパスが違います。’ ); end; end; end.