\r\n```\r\n変数 strItems はECショップオリジナルのタグで生成されるので2商品カートに入っていればこのような内容になります。\r\n```ここに言語を入力\r\nvar strItems = \"{item_id: 'item155', category_id: '', price: '1590', quantity: '1'},{item_id: 'item156', category_id: '', price: '2200', quantity: '1'},\";\r\n```\r\n\r\n\r\n末尾のカンマが不要になるので末尾1文字を slice しています。\r\n```ここに言語を入力\r\nvar result = strItems.slice(0, -1);\r\n```\r\n\r\nまたコードの発火確認は、Google Chrome デベロッパーツール(Network)でしています。\r\n\r\n---\r\n★2021/1/29 追記です。\r\n\r\n以下はYahooガイドに掲載されていた完成例です。\r\n「yahoo_retargeting_items」というプロパティへオブジェクトな配列になるように配列を追加していかなければなりません。\r\n\r\n```\r\n\r\n```","answerCount":2,"upvoteCount":0,"datePublished":"2021-01-28T18:20:53.100Z","dateModified":"2021-01-29T10:25:14.811Z","acceptedAnswer":{"@type":"Answer","text":"的外れかもしれませんが。\r\n\r\nyahoo_retargeting_itemsで要求されるのはオブジェクトの配列ではないでしょうか?\r\nresultに入っているのは文字列であることに注意しましょう。\r\n\r\nまた、resultに入っているのはJSONとしては不適合です。\r\nそのままJSON.parseに渡してもエラーで弾かれるだけですので、JSONに適合出来るように構成して下さい。\r\n\r\n※追記\r\nJSONは配列も構成要素として記述できます。こんな感じで。\r\n```javascript\r\nvar strItems = '[{\"item_id\": \"item1\", \"category_id\": \"\", \"price\": \"1200\", \"quantity\": \"1\"},{\"item_id\": \"item2\", \"category_id\": \"\", \"price\": \"2000\", \"quantity\": \"1\"}]';\r\nvar obj = JSON.parse(strItems);\r\n```\r\nこの場合、objの中身は\"オブジェクト二つを要素として持つ配列\"となりますので、\r\nyahoo_retargeting_itemsに渡すのは[obj]ではなくobjになります。\r\n```javascript\r\n...\r\n\"yahoo_retargeting_items\":obj\r\n...\r\n```\r\n\r\n※更に追記\r\nJSONをどのように記述すればいいかは[RFC8259](http://www.asahi-net.or.jp/~ax2s-kmtn/internet/rfc8259j.html)(リンク先は日本語訳)で厳密な書式が定義されています。\r\n手っ取り早く構造化されたデータをJSONに変換したいのであれば、JSON.stringifyを使えばokです。","dateModified":"2021-01-30T03:57:48.298Z","datePublished":"2021-01-29T01:05:23.895Z","upvoteCount":1,"url":"https://teratail.com/questions/319190#reply-443899"},"suggestedAnswer":[{"@type":"Answer","text":"最善策かわかりませんがytagに引数を参照させるところからでは?\r\nfunction(arg){hoge.push(arg)}\r\n\r\nどうしてもargumentsからひっぱりたいなら\r\n```javascript\r\nvar a=[];\r\nfunction func(){\r\n a.push(...arguments);\r\n}\r\nfunc(\"hoge\");\r\nconsole.log(a);\r\n```","dateModified":"2021-01-29T00:15:09.368Z","datePublished":"2021-01-29T00:07:38.236Z","upvoteCount":0,"url":"https://teratail.com/questions/319190#reply-443887","comment":[{"@type":"Comment","text":"ご回答いたきまして有難う御座います。\r\n\r\nytagへ引数を参照させることをすっかり失念していました。\r\nヒントを与えていただきまして有難う御座います。\r\n\r\n下記のように function items() へ配列を渡してみました。\r\n\r\n\r\nvar arry = [];\r\n\r\nfunction items(){\r\n arry.push(...arguments);\r\n}\r\n\r\nitems('item1','1000','1','item2','2000','1','item3','1500','2');\r\n\r\n\r\nwindow.yjDataLayer = window.yjDataLayer || [];\r\nfunction ytag() { \r\n yjDataLayer.push(arguments);\r\n}\r\nytag({\r\n \"type\":\"yjad_retargeting\",\r\n \"config\":{\r\n \"yahoo_retargeting_id\": \"XXXXXXXXXX\",\r\n \"yahoo_retargeting_label\": \"cart\",\r\n \"yahoo_retargeting_page_type\": \"cart\",\r\n \"yahoo_retargeting_items\":[\r\n {item_id: arry[0], category_id: '', price: arry[1], quantity: arry[2]}\r\n ,{item_id: arry[3], category_id: '', price: arry[4], quantity: arry[5]}\r\n ,{item_id: arry[6], category_id: '', price: arry[7], quantity: arry[8]}\r\n ]\r\n }\r\n});\r\n\r\n\r\n配列数は商品3個の場合ですと 上記で発火を確認できましたが、\r\n商品10個までを取得できるように単純に下記のようにしてみました。\r\n\r\n\r\n\"yahoo_retargeting_items\":[\r\n {item_id: arry[0], category_id: '', price: arry[1], quantity: arry[2]}\r\n ,{item_id: arry[3], category_id: '', price: arry[4], quantity: arry[5]}\r\n ,{item_id: arry[6], category_id: '', price: arry[7], quantity: arry[8]}\r\n ,{item_id: arry[9], category_id: '', price: arry[10], quantity: arry[11]}\r\n ,{item_id: arry[12], category_id: '', price: arry[13], quantity: arry[14]}\r\n ,{item_id: arry[15], category_id: '', price: arry[16], quantity: arry[17]}\r\n ,{item_id: arry[18], category_id: '', price: arry[19], quantity: arry[20]}\r\n ,{item_id: arry[21], category_id: '', price: arry[22], quantity: arry[23]}\r\n ,{item_id: arry[24], category_id: '', price: arry[25], quantity: arry[26]}\r\n ,{item_id: arry[27], category_id: '', price: arry[28], quantity: arry[29]}\r\n ]\r\n\r\n\r\n商品10個をカートに入れた場合は正常に発火しましたが\r\n商品が10個未満の場合ですと発火しませんでした。\r\n\r\nその場合はどのような考え方をすべきでしょうか。\r\n\r\n大変お手数ですがご教示のほど宜しくお願い致します。","datePublished":"2021-01-29T06:51:18.457Z","dateModified":"2021-01-29T06:51:18.457Z"}]}],"breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"トップ","url":"https://teratail.com"},{"@type":"ListItem","position":2,"name":"JSONに関する質問","url":"https://teratail.com/tags/JSON"},{"@type":"ListItem","position":3,"name":"JSON","url":"https://teratail.com/tags/JSON"}]}}}
YDNサイトリターゲティングタグをコンテンツ(買い物かご内)に設置したいと考えています。
下記のタグを作成して買い物かごheaderへ設置しましたが、
変数 result を yahoo_retargeting_items 属性に指定したのですが発火しませんでした。
オブジェクト型のデータへ変数を渡してあげるにはどのように指定すれば良いでしょうか。
大変お手数ですがご教示のほど宜しくお願い申し上げます。
<script>
var strItems = "{item_id: 'item155', category_id: '', price: '1590', quantity: '1'},";
var result = strItems.slice(0, -1);
window.yjDataLayer = window.yjDataLayer || [];
function ytag() { yjDataLayer.push(arguments); }
ytag({
"type":"yjad_retargeting",
"config":{
"yahoo_retargeting_id": "XXXXXXXXX",
"yahoo_retargeting_label": "cart",
"yahoo_retargeting_page_type": "cart",
"yahoo_retargeting_items":[ result ]
}
});
</script>
変数 strItems はECショップオリジナルのタグで生成されるので2商品カートに入っていればこのような内容になります。
var strItems = "{item_id: 'item155', category_id: '', price: '1590', quantity: '1'},{item_id: 'item156', category_id: '', price: '2200', quantity: '1'},";
末尾のカンマが不要になるので末尾1文字を slice しています。
var result = strItems.slice(0, -1);
またコードの発火確認は、Google Chrome デベロッパーツール(Network)でしています。
★2021/1/29 追記です。
以下はYahooガイドに掲載されていた完成例です。
「yahoo_retargeting_items」というプロパティへオブジェクトな配列になるように配列を追加していかなければなりません。
<script>
window.yjDataLayer = window.yjDataLayer || [];
function ytag() { yjDataLayer.push(arguments); }
ytag({
"type":"yjad_retargeting",
"config":{
"yahoo_retargeting_id": "XXXXXXXXX",
"yahoo_retargeting_label": "cart",
"yahoo_retargeting_page_type": "cart",
"yahoo_retargeting_items":[
{item_id: 'item1', category_id: 'cate1', price: '100', quantity: '1'}
,{item_id: 'item2', category_id: 'cate2', price: '200', quantity: '2'}
,{item_id: 'item10', category_id: 'cate10', price: '1000', quantity: '10'}
]
}
});
</script>
ベストアンサー
的外れかもしれませんが。
yahoo_retargeting_itemsで要求されるのはオブジェクトの配列ではないでしょうか?
resultに入っているのは文字列であることに注意しましょう。
また、resultに入っているのはJSONとしては不適合です。
そのままJSON.parseに渡してもエラーで弾かれるだけですので、JSONに適合出来るように構成して下さい。
※追記
JSONは配列も構成要素として記述できます。こんな感じで。
javascript
1var strItems = '[{"item_id": "item1", "category_id": "", "price": "1200", "quantity": "1"},{"item_id": "item2", "category_id": "", "price": "2000", "quantity": "1"}]';
2var obj = JSON.parse(strItems);
この場合、objの中身は"オブジェクト二つを要素として持つ配列"となりますので、
yahoo_retargeting_itemsに渡すのは[obj]ではなくobjになります。
javascript
1...
2"yahoo_retargeting_items":obj
3...
※更に追記
JSONをどのように記述すればいいかはRFC8259(リンク先は日本語訳)で厳密な書式が定義されています。
手っ取り早く構造化されたデータをJSONに変換したいのであれば、JSON.stringifyを使えばokです。
最善策かわかりませんがytagに引数を参照させるところからでは?
function(arg){hoge.push(arg)}
どうしてもargumentsからひっぱりたいなら
javascript
1var a=[];
2function func(){
3 a.push(...arguments);
4}
5func("hoge");
6console.log(a);
15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.29%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる
質問する
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/01/29 10:09
2021/01/29 10:28
2021/02/07 17:16