2014年8月21日木曜日

FileMaker WEBビューア経由でJSONデータにアクセス!(3)



FileMaker WEBビューア経由でJSONデータにアクセス!(2) :
http://qbxxdp.blogspot.jp/2014/08/filemaker-webjson2.html
から改良。

修正!
・OS X , iOS でJSONのキーが日本語の場合に対応。
・値がTEXTでない場合、[object Object] を出力しないように変更。
・JSONのキーに対する変数名を取得するように変更。
・Winは、クリップボード経由を追加。


検証:
FileMaker Pro 13
FileMaker Go 13
Mac OS X 10.9
Windows 7|Windows 8

○|Mac OS X 10.9
○|FileMaker Go 13
○|Windows 7|Windows 8 (クリップボード経由)

スクリプト:JsonAnalyzer
Web ビューアの設定 [オブジェクト名: "WEB1"; 処理: リセット]
スクリプト一時停止/続行 [間隔(秒): 0]
変数を設定 [$JSON; 値:Substitute ( JSON::JSON ; ["¶" ; ""] ; [Char ( 10 ) ; ""]  ; [Char ( 13 ) ; ""]  )]
変数を設定 [$OS; 値:Get ( システムプラットフォーム )]
変数を設定 [$HTML; 値:" ....."]
Web ビューアの設定 [オブジェクト名: "WEB1"; URL: "data:text/html;charset=utf-8," & $HTML]

$HTMLの中身     

「スクリプト:fmpJsonAnalyzer」 に変更を加え、JSONのキーと値をFileMakerのそれぞれのフィールドに取得できるように変更。

スクリプト:fmpJsonAnalyzer
変数を設定 [$fmKeys; 値:Substitute ( $fmKeys ; "{RTN}" ; ¶ )]
フィールド設定 [JSON::Key; $fmKeys]
変数を設定 [$MAX; 値:ValueCount ( $fmKeys )]
変数を設定 [$n; 値:1]
Loop
Exit Loop If [$n>$MAX]
変数を設定 [$fmKey; 値:GetValue ( $fmKeys ; $n )]
変数を設定 [$Values; 値:$Values  &If ( IsEmpty ( $Values ) ; "" ; ¶ ) & Evaluate ( $fmkey )]
変数を設定 [$n; 値:$n+1]
End Loop
フィールド設定 [JSON::Value; $Values]
フィールドへ移動 []



Windows専用スクリプト
スクリプト:JsonAnalyzer_clipboard
#For Windows Only
レイアウト切り替え [「JSON」 (JSON)]
フィールド設定 [SYSTEM::gClipboard; ""]
Web ビューアの設定 [オブジェクト名: "WEB1"; 処理: リセット]
スクリプト一時停止/続行 [間隔(秒): 0]
変数を設定 [$JSON; 値:Substitute ( JSON::JSON ; ["¶" ; ""] ; [Char ( 10 ) ; ""]  ; [Char ( 13 ) ; ""]  )]
変数を設定 [$OS; 値:Get ( システムプラットフォーム )]
変数を設定 [$HTML; 値:"....."]
#"data:text/html;charset=utf-8,
Web ビューアの設定 [オブジェクト名: "WEB1"; URL: "data:text/html;charset=utf-8," & $HTML]
変数を設定 [$n; 値:0]
Loop
スクリプト一時停止/続行 [間隔(秒): .5]
貼り付け [選択; SYSTEM::gClipboard]
Exit Loop If [ not IsEmpty ( SYSTEM::gClipboard )]
Exit Loop If [$n>10]
変数を設定 [$n; 値:$n+1]
End Loop
フィールドへ移動 []
If [$n>10]
カスタムダイアログを表示 ["!"; "DATA取得失敗"]
現在のスクリプト終了 []
End If
変数を設定 [$DATA; 値:SYSTEM::gClipboard]
#
変数を設定 [$DATA; 値:Substitute ( $DATA ; "\";$" ; "\"" & ¶ & "$")]
変数を設定 [$MAX; 値:ValueCount ( $DATA )]
変数を設定 [$n; 値:1]
Loop
Exit Loop If [$n>$MAX]
変数を設定 [$er; 値:Evaluate ( "Let ([" &  GetValue ( $DATA ; $n )  & "]; 0 )" )]
変数を設定 [$n; 値:$n+1]
End Loop
#
変数を設定 [$fmKeys; 値:Evaluate ( $fmKeys )]
フィールド設定 [JSON::Key; $fmKeys]
変数を設定 [$MAX; 値:ValueCount ( $fmKeys )]
変数を設定 [$n; 値:1]
Loop
Exit Loop If [$n>$MAX]
変数を設定 [$fmKey; 値:GetValue ( $fmKeys ; $n )]
変数を設定 [$Values; 値:$Values  &If ( IsEmpty ( $Values ) ; "" ; ¶ ) & Evaluate ( $fmkey )]
変数を設定 [$n; 値:$n+1]
End Loop
フィールド設定 [JSON::Value; $Values]
フィールドへ移動 []

$HTMLの中



8万文字のJSONデータでも取得できます。
OS X、iOS に比べると処理が遅いです。




0 件のコメント:

コメントを投稿