初心者のFileMaker pro Q&A (旧掲示板)

みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。

1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)

You are not logged in.

Announcement

新しい掲示板は、こちら:https://fm-aid.com/forum/t/filemaker


#1 2021-06-16 16:05:17

JSONGetElement関数の計算式について

お世話になっております。
FMP19、Win10です。

取得したJSONの内容を各項目ごとに抽出したいです。
取得したJSONの階層が公式サイトの例より多く、計算式をどのように書けば良いのかわからなくなってしまいました。

抽出したいものはaddress、company、company_kana、fax、fname、fname_kana、lname、lname_kana、mail、office、postal、tel、urlです。

よろしくお願いいたします。


↓試した式の一部↓
JSONGetElement ( $JSON ; "response.dataList[0]company" )
JSONGetElement ( $JSON ; "result.response.dataList[0]company" )


↓取得したJSON(一部改変)↓
{
    "result" :
    {
        "message" : [],
        "response" :
        {
            "dataList" :
            [
                {
                    "address" :
                    [
                        "東京都",
                        ""
                    ],
                    "company" : "くしゃみばかり出る株式会社",
                    "company_kana" : "クシャミバカリデルカブシキガイシャ",
                    "fax" : [ "03-0000-1111", "" ],
                    "fname" : "鼻津",
                    "fname_kana" : "ハナヅ",
                    "lname" : "真里",
                    "lname_kana" : "マリ",
                    "mail" :
                    [
                        "mari.hanadu@kahun.co.jp",
                        ""
                    ],
                    "office" : [ "aaaaa", "" ],
                    "postal" : [ "123-4567", "" ],
                    "tel" : [ "03-0000-0000", "" ],
                    "url" :
                    [
                        "https://xxx.xxx.jq/xxx/xxx.html",
                        ""
                    ]
                }
            ]
        },
        "status" : "success"
    }
}

Offline

#2 2021-06-16 18:08:36

まか
Guest

Re: JSONGetElement関数の計算式について

スクリプトステップ:変数を設定 ※変数数を宣言するためだけ

While (
 [
  // 初期変数
  $JSON = JSONListValues ( JSONGetElement ( テーブル::JSON ; "result.response.dataList" ) ; "" ) ;
  $JSONキーの一覧 = JSONListKeys ( $JSON ; "" ) ;
  $処理数 = ValueCount ( $JSONキーの一覧 ) ;
  $処理 = 0
 ] ;

  // 条件
  $処理 < $処理数 ;

 [
  // ロジック
  $繰り返しの番号 = $処理 + 1 ;
  $GetKey = GetValue ( $JSONキーの一覧 ; $繰り返しの番号 ) ;
  $JSONの値[ $繰り返しの番号 ] = JSONGetElement ( $JSON ; $GetKey );

  $処理 = $処理 + 1
 ] ;

 ""
)

●JSONGetElementのキーを"result.response.dataList"に設定して、JSONを単純化

{
	"address" : [ "東京都", "" ],
	"company" : "くしゃみばかり出る株式会社",
	"company_kana" : "クシャミバカリデルカブシキガイシャ",
	"fax" : [ "03-0000-1111", "" ],
	"fname" : "鼻津",
	"fname_kana" : "ハナヅ",
	"lname" : "真里",
	"lname_kana" : "マリ",
	"mail" : [ "mari.hanadu@kahun.co.jp", "" ],
	"office" : [ "aaaaa", "" ],
	"postal" : [ "123-4567", "" ],
	"tel" : [ "03-0000-0000", "" ],
	"url" : [ "https://xxx.xxx.jq/xxx/xxx.html", "" ]
}

●単純化した$JSON→JSONListKeys ( $JSON ; "" )
※スクリプトステップ:フィールドを名前で設定のネタになる値一覧

address
company
company_kana
fax
fname
fname_kana
lname
lname_kana
mail
office
postal
tel
url

●whileのロジックで、処理の0番から繰り返しの+1番を宣言
●GetValue関数で、$JSONキーの一覧から、繰り返し番号の値を得る
●FileMakerの繰り返し変数、$JSONの値[ $繰り返しの番号 ]にJSONGetElement ( $JSON ; $GetKey )を代入

●13番目の処理の例
・フィールドを名前で設定 → GetValue ( $JSONキーの一覧 ; 13 )
・繰り返し変数から値を得る → JSONListValues ( $JSONの値[ 13 ] ; "" )

n番目の値の入手と、末尾のnullの削除はGetValue関数で対応

#3 2021-06-17 08:36:03

himadanee
Guest

Re: JSONGetElement関数の計算式について

JSONGetElement ( $JSON ; "result.response.dataList[0]company" )
で取得できるみたいですが?
JSONGetElement ( $JSON ; "result.response.dataList[0].company" )
の方が何となく気持ちいいけど...
「一部改変」のせいで、改変する前のだと取得できないのかな?

#4 2021-06-17 10:10:55

Re: JSONGetElement関数の計算式について

まか様

ご回答ありがとうございます。

>●whileのロジックで、処理の0番から繰り返しの+1番を宣言
この部分で繰り返し+1を宣言する理由がよくわかりませんでした。。
繰り返しまでだとダメな理由はあるのでしょうか?


himadanee様

ご回答ありがとうございます。

おっしゃる通り、JSONGetElement ( $JSON ; "result.response.dataList[0]company" )でもJSONGetElement ( $JSON ; "result.response.dataList[0].company" )でも
取得できました…
昨日はできなかったのになぜ…
他の方から1晩寝かせておくとできるようになることがよくあると聞いたのですが、本当にそうなのでしょうか??

Offline

Registered users online in this topic: 0, guests: 1
[Bot] claudebot

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.007 seconds, 10 queries executed - Memory usage: 516.84 KiB (Peak: 521.75 KiB) ]