みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
質問させて下さい。
マニュアル等見たのですが、見つけられず質問させて下さい。
Aのjson
{
商品
[...,.....]
}
Bのjson
{
付属品リスト
[...,.....]
}
を一つのjsonに仕上げたいのです。
{
商品[...]
付属品リスト[]
}
何卒よろしくお願いします。
ハゲ
「配列」要素の追加挿入には、「JSONArray」パラメータを指定します。
JSONFormatElements (
JSONSetElement (
Aのjson構文
; "付属品リスト"
; JSONGetElement(Bのjson構文; "付属品リスト")
; JSONArray
)
)
Offline
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)
)
としたバイ
{
伝票:
{
商品:
[
商品:
[
{
となってしまうのです。
どうしても商品の一階層をなくしたいのです。
よろしくお願いします
ハゲ
とした場合、商品[商品{}]のように二重になってしまうのです。。
すみませんゴミ投稿でした(汗)
もう一度jsonを生成すればよいだけでした。
ループの方法がわかりにくかったですが、思ったようにjsonを作る事ができました。
これからの課題はLetの中でループを回すやり方を勉強したいです。
いつもいつも初心者な質問に答えて頂いてありがとうございます(m_m)
ハゲ
終わってますが、こんなコト?
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
Hiroさん
おぉーーーこれです。
今回は全部JSONsetで書き直しましたが、この方法は使い倒すと思います。
ありがとうございます(m__m)
ハゲ
Hiroさん
いつもありがとうございます。
伝票の中にもう二つ#jnsCと#jnsD
を追加する場合はどうでしょうか?
何卒よろしくお願い申し上げます(m_m)
ハゲ
hiro様
#jsnCと#jsnDをつくり、
伝票.オプション(jnsC)を
JSONSetElement(#JSN;JSONGetElement(#JSN;"伝票.オプション"
とすると構造的にはあっているのてずが、やはり表示順位がおかしいですね。
1商品
2付属品
3オプション
と並んで欲しいのですが.....
複数のArrayをセットした場合の表示順位を調整する方法はありますか?
ハゲ
JSON内の名前付きオブジェクトの順番は気にしてはいけません。特定の順番が必要だとしたら、その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
ループ処理に興味あるようなので、ベタベタな#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
Hiroさん
うわ~凄いですね。
ループ処理ずっごく勉強になります。というか今は1行ずつ単位で勉強してゆく感じですが(汗)
Let関数やJSON、WebAPIに興味があります。
初心者な質問も仕方でイライラするかもですが、何卒よろしくお願いします(m_m)
ハゲ
Pages: 1
[ Generated in 0.007 seconds, 7 queries executed - Memory usage: 529.19 KiB (Peak: 549.73 KiB) ]