5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

FileMakerAdvent Calendar 2022

Day 6

FileMaker ExecuteSQLの結果をJSONで取得

Last updated at Posted at 2022-12-06

動作検証:FileMaker Pro 19.6

こんなカンジのテーブルのデータをExecuteSQLで取得し、

サンプルデータ

Image_001.png

以下のようなJSON形式のデータを返します。

結果

[
	{
		"code": "1",
		"name": "鈴木 太郎",
		"note": "1行目\n2行目"
	},
	{
		"code": "2",
		"name": "佐藤 花子",
		"note": "旧姓:\"田中\""
	}
]

スクリプト

//#クエリを作成
変数を設定 [ $query; 値:Let ( [
~query ="select
'(((.code.))):(((.'||`code`||'.)))'
,'(((.name.))):(((.'||`name`||'.)))'
,'(((.note.))):(((.'||`note`||'.)))'
FROM `People`
WHERE `name` LIKE '%{名称}%'
FETCH FIRST 10000 ROWS ONLY "
];
 Substitute ( ~query
 ; ["`"; "\""]
 ; ["{名称}"; GLOBAL::gSearch ]
 )
)]

//#ExecuteSQLを実行
//#フィールド区切りを","、レコード区切りを"},{" で設定
変数を設定 [ $result; 値:ExecuteSQL ( $query ; "," ; "},{" ) ]

//#改行とダブルクォーテーションの処理
変数を設定 [ $result; 値:"[{" & 
Substitute ( $Result 
	; [ ; "\n"]	//改行を"\n"に置換
	; ["\"" ; "\\\""] 	//ダブルクォーテーションを"\""
	; ["(((." ; "\""] 
	; [".)))" ; "\""] ) & 
"}]" ]

スクリプトの説明

クエリを作成

'(((.code.))):(((.'||`code`||'.)))'

(((. と .))) は、フィールド内で使用していない文字であれば何でも良いです。
視認性が良いので (((..))) を使用しています。
(((. と .))) は、最終的に " (ダブルクォーテーション)へ置換します。

|| は、クエリ内での連結文字

` (バッククォート)視認性が良いので使用しています。あとで、 " (ダブルクォーテーション)へ置換します。

\" が増えるとクエリが読みにくくなるので。

最初の10000行を取得(なくても良いです)

FETCH FIRST 10000 ROWS ONLY

作成されたクエリ
※デバッグしやすいように一旦変数に入れてクエリを確認。
(GLOBAL::gSearch が空欄なので "name" LIKE '%%' となっている)

select 
'(((.code.))):(((.'||"code"||'.)))' 
,'(((.name.))):(((.'||"name"||'.)))' 
,'(((.note.))):(((.'||"note"||'.)))' 
FROM "People" 
WHERE "name" LIKE '%%' 
FETCH FIRST 10000 ROWS ONLY 

ExecuteSQLを実行

フィールド区切りを","、レコード区切りを"},{" で設定

変数を設定 [ $result; 値:ExecuteSQL ( $query ; "," ; "},{" ) ]

結果

(((.code.))):(((.1.))),(((.name.))):(((.鈴木 太郎.))),(((.note.))):(((.1行目
2行目.)))},{(((.code.))):(((.2.))),(((.name.))):(((.佐藤 花子.))),(((.note.))):(((.旧姓:"田中".)))

JSON化

改行、ダブルクォーテーション と (((..))) の処理

変数を設定 [ $result; 値:"[{" & 
Substitute ( $Result 
	; [ ; "\n"]	//改行を"\n"に置換
	; ["\"" ; "\\\""] 	//ダブルクォーテーションを"\""
	; ["(((." ; "\""] 
	; [".)))" ; "\""] ) & 
"}]" ]

結果

[
	{
		"code": "1",
		"name": "鈴木 太郎",
		"note": "1行目\n2行目"
	},
	{
		"code": "2",
		"name": "佐藤 花子",
		"note": "旧姓:\"田中\""
	}
]
5
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?