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

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

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

You are not logged in.

Announcement

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


#1 2019-09-08 12:16:20

秩父の禿オヤジ
Guest

jsonの結合の仕方

質問させて下さい。

マニュアル等見たのですが、見つけられず質問させて下さい。

Aのjson
{
商品
[...,.....]
}
Bのjson
{
付属品リスト
[...,.....]
}
を一つのjsonに仕上げたいのです。
{
商品[...]
付属品リスト[]
}

何卒よろしくお願いします。

ハゲ

#2 2019-09-08 15:54:19

Hiro
Member

Re: jsonの結合の仕方

「配列」要素の追加挿入には、「JSONArray」パラメータを指定します。


JSONFormatElements (

   JSONSetElement (
      Aのjson構文
      ; "付属品リスト"
      ; JSONGetElement(Bのjson構文; "付属品リスト")
      ; JSONArray
   )

)

Offline

#3 2019-09-08 16:40:43

秩父の禿オヤジ
Guest

Re: jsonの結合の仕方

Hiroさん
ありがとうございます。
Hiroさん構文の理解が(汗)

$商品json及び$付属品json共に
{
   付属品:
   [
     {"ID";"001","品番";bbbbbb,"付属品名";"eeeee"},{"ID";"002","品番";bbbbbb,"付属品名";"eeeee"},
   ]
}

Let([
_商品=$商品json;
_付属品=$付属品json
_A = JSONSetElement ("{}";"伝票";"";JSONString);
_A = JSONSetElement ("";"商品";"_商品";JSONArray);
_A = JSONSetElement ("";"付属品";"_付属品";JSONArray)];
JSONFormatElements(_A)
)
としたバイ
{
伝票:
  {
     商品:
      [
        商品:
        [
          {
となってしまうのです。
どうしても商品の一階層をなくしたいのです。
よろしくお願いします
ハゲ

とした場合、商品[商品{}]のように二重になってしまうのです。。

#4 2019-09-08 20:23:59

秩父の禿オヤジ
Guest

Re: jsonの結合の仕方

すみませんゴミ投稿でした(汗)
もう一度jsonを生成すればよいだけでした。
ループの方法がわかりにくかったですが、思ったようにjsonを作る事ができました。
これからの課題はLetの中でループを回すやり方を勉強したいです。

いつもいつも初心者な質問に答えて頂いてありがとうございます(m_m)
ハゲ

#5 2019-09-08 22:03:33

Hiro
Member

Re: jsonの結合の仕方

終わってますが、こんなコト?

Let(
[
   #jsnA=
     "{""商品"":[{""ID"":""001"",""品番"":""bbbbbb"",""付属品名"":""eeeee""},{""ID"";""002"",""品番"":""bbbbbb"",""付属品名"":""eeeee""}]}";
   #jsnB=
     "{""附属品"":[{""ID"":""001"",""品番"":""bbbbbb"",""付属品名"":""eeeee""},{""ID"";""002"",""品番"":""bbbbbb"",""付属品名"":""eeeee""}]}";
   #JSN=JSONSetElement(#jsnA; "附属品"; JSONGetElement(#jsnB; "附属品"); JSONArray);
   #JSN=JSONSetElement(""; "伝票"; #JSN; JSONObject)
];
   JSONFormatElements(#JSN)
)

※ なお、例示項目名「付属品」→「附属品」に変更してあるのは、
JSON関数内複数要素の結果表示順が、式内計算順でなく文字コード順
となる事への、表示順番の補正対策です。
("付属品"< "商品" → "商品"< "附属品")

Offline

#6 2019-09-09 23:31:58

秩父の禿オヤジ
Guest

Re: jsonの結合の仕方

Hiroさん

おぉーーーこれです。
今回は全部JSONsetで書き直しましたが、この方法は使い倒すと思います。
ありがとうございます(m__m)

ハゲ

#7 2019-09-10 09:21:35

秩父の禿オヤジ
Guest

Re: jsonの結合の仕方

Hiroさん
いつもありがとうございます。

伝票の中にもう二つ#jnsCと#jnsD
を追加する場合はどうでしょうか?

何卒よろしくお願い申し上げます(m_m)

ハゲ

#8 2019-09-10 11:16:52

秩父の禿オヤジ
Guest

Re: jsonの結合の仕方

hiro様

#jsnCと#jsnDをつくり、
伝票.オプション(jnsC)を
JSONSetElement(#JSN;JSONGetElement(#JSN;"伝票.オプション"
とすると構造的にはあっているのてずが、やはり表示順位がおかしいですね。
1商品
2付属品
3オプション
と並んで欲しいのですが.....
複数のArrayをセットした場合の表示順位を調整する方法はありますか?

ハゲ

#9 2019-09-10 11:39:42

himaganee
Guest

Re: jsonの結合の仕方

JSON内の名前付きオブジェクトの順番は気にしてはいけません。特定の順番が必要だとしたら、そのJSONを使う側の実装が間違っています。

#10 2019-09-10 13:53:57

Hiro
Member

Re: jsonの結合の仕方


Let(
[
   #jsnA="JSON構文A";   // "{""商品"":[{""ID"":""001"",""品番"":""bbbbbb"",""付属品名"":""eeeee""},{""ID"";""002"",""品番"":""bbbbbb"",""付属品名"":""eeeee""}]}"
   #jsnB="JSON構文B";
   #jsnC="JSON構文C";
   #jsnD="JSON構文D";
   #keyA=GetValue(JSONListKeys(#jsnA; ""); 1);   // "商品"
   #keyB=GetValue(JSONListKeys(#jsnB; ""); 1);
   #keyC=GetValue(JSONListKeys(#jsnC; ""); 1);
   #keyD=GetValue(JSONListKeys(#jsnD; ""); 1);
   #JSN="{}";
   #JSN=JSONSetElement(#JSN;  #keyA; JSONGetElement (#jsnA; #keyA); JSONArray);
   #JSN=JSONSetElement(#JSN;  #keyB; JSONGetElement (#jsnB; #keyB); JSONArray);
   #JSN=JSONSetElement(#JSN;  #keyC; JSONGetElement (#jsnC; #keyC); JSONArray);
   #JSN=JSONSetElement(#JSN;  #keyD; JSONGetElement (#jsnD; #keyD); JSONArray);
   #JSN=JSONSetElement("{}"; "伝票"; #JSN; JSONObject)
];
   JSONFormatElements(#JSN)
)

※同意!→ >#9『JSON内の名前付きオブジェクト(ハッシュ配列)の順番は気にしてはいけません。特定の順番が必要だとしたら、そのJSONを使う側の実装が間違っています。』
・「ハッシュ配列」の使途からその理由を考えてみてください。
・同じキーは上書き、新規キーは追加します。

Last edited by Hiro (2019-09-10 14:15:11)

Offline

#11 2019-09-10 16:09:58

Hiro
Member

Re: jsonの結合の仕方

ループ処理に興味あるようなので、ベタベタな#10式をループ式化すると、

Let(
[
   $JSNs=
      List( ""
         ; JSONSetElement("{}"; ""; "JSON構文A"; JSONObject)
         ; JSONSetElement("{}"; ""; "JSON構文B"; JSONObject)
         ; JSONSetElement("{}"; ""; "JSON構文C"; JSONObject)
         ; JSONSetElement("{}"; ""; "JSON構文D"; JSONObject)
      );
   $i=0;
   $res="";
   $LOOP=
      "Case(
          $i=ValueCount($JSNs)
          ; JSONSetElement(""{}""; ""伝票""; $res; JSONObject)
          ; Let([
               $i=$i+1;
               #jsn=GetValue($JSNs; $i);
               #key=GetValue(JSONListKeys(#jsn; """"); 1);
               $res=JSONSetElement($res;  #key; JSONGetElement (#jsn; #key); JSONArray)
             ]; Evaluate($LOOP) )
      )"
];
   JSONFormatElements(Evaluate($LOOP))
)

Last edited by Hiro (2019-09-10 18:54:17)

Offline

#12 2019-09-10 17:41:15

秩父の禿オヤジ
Guest

Re: jsonの結合の仕方

Hiroさん

うわ~凄いですね。
ループ処理ずっごく勉強になります。というか今は1行ずつ単位で勉強してゆく感じですが(汗)
Let関数やJSON、WebAPIに興味があります。
初心者な質問も仕方でイライラするかもですが、何卒よろしくお願いします(m_m)

ハゲ

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

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.009 seconds, 9 queries executed - Memory usage: 529.57 KiB (Peak: 550.11 KiB) ]