簡體   English   中英

文本變量到 json 數組

[英]Text var to json array

我正在嘗試使用 prebid 配置標題出價。 我正在使用 php + mysql 從數據庫中加載我想要的廣告,並使用 php 中的數據在 javascript 中創建一個文本變量。

當我必須創建變量“adUnits”時,問題就出現了。 如果我手動創建它,直接編寫它可以正常工作,但使用 javascript 創建相同的內容我不明白它的工作原理。

這是有效的代碼

var adUnits = [{
     code: '/123/468x60',
     mediaTypes: {
         banner: {
             sizes: [
                 [468, 60]
             ]
         }
     },
     bids: [{
         bidder: 'adserver',
         params: {
             networkId: 1234
         }
     }]
 }, {
     code: '/123/336x280',
     mediaTypes: {
         banner: {
             sizes: [
                 [336, 280],
                 [300, 250]
             ]
         }
     },
     bids: [{
         bidder: 'adserver',
         params: {
             networkId: 1234
         }
     }]
 }, {
     code: '/123/300x600',
     mediaTypes: {
         banner: {
             sizes: [
                 [300, 600],
                 [300, 250]
             ]
         }
     },
     bids: [{
         bidder: 'adserver',
         params: {
             networkId: 1234
         }
     }]
 }];

這是不起作用的代碼

var arrayadsname = adsname.split('#');//content of arrayadsname => /123/468x60#/123/336x280#/123/300x600
var arrayadssize = adssize.split('#');//content of arrayadssize => 468x60#336,280|300,250#300,600|300,250
var arraysize = '';
var ad = '';
var adUnits = [];
var preadUnits = '';

for (var i = 0; i < arrayadsname.length; i++) {  
        var arraysizeparts = arrayadssize[i].split('|');

    for (var j = 0; j < arraysizeparts.length; j++) {
                if (j == 0){
                        arraysize = '[' + arraysizeparts[j] + ']';
                }else{
                        arraysize = arraysize + ',' + '[' + arraysizeparts[j] + ']';
                }
            }

        ad = '{code: \'' + arrayadsname[i] + '\', mediaTypes: {banner: {sizes: ' + '[' + arraysize + ']' + '}}, bids: [{bidder: \'adserver\', params: {networkId: 1234}}]}';

        if (i == 0) preadUnits = ad;
        else preadUnits = preadUnits + ',' + ad;
}
//Result of ad => {code: '/123/468x60', mediaTypes: {banner: {sizes: [[468,60]]}}, bids: [{bidder: 'adserver', params: {networkId: 1234}}]},{code: '/123/336x280', mediaTypes: {banner: {sizes: [[336,280],[300,250]]}}, bids: [{bidder: 'adserver', params: {networkId: 1234}}]},{code: '/123/300x600', mediaTypes: {banner: {sizes: [[300,600],[300,250]]}}, bids: [{bidder: 'adserver', params: {networkId: 1234}}]}


adUnits = "[" + JSON.stringify(preadUnits) + "]";

我已經嘗試了所有可能的組合,將變量聲明為單位,如對象、數組、文本,並使用 JSON.stringify,JSON.parse 還聲明“arraysize”,如數組並解析它。 我不知道是哪個問題。

我在控制台中看到此錯誤:“被調用者:[異常:類型錯誤:'caller'、'callee' 和 'arguments' 屬性可能無法在嚴格模式函數或參數對象上訪問以在 Arguments.invokeGetter 上調用它們”

提前致謝

首先為adssize每個項目構建一個sizes數組 - 例如,將'300,600|300,250'變成[[300, 600], [300, 250]] 然后,您可以通過映射代碼(按#拆分)並訪問剛剛構建的sizes數組上的適當索引來創建adUnits對象:

 const codes = '/123/468x60#/123/336x280#/123/300x600'.split('#'); const sizes = '468x60#336,280|300,250#300,600|300,250' .split('#') .map( // str is something like: '300,600|300,250' str => str.split('|').map( // substr is something like: '300,600' substr => substr.split(/[,x]/).map(Number) ) ); const adUnits = codes.map((code, i) => ({ code, mediaTypes: { banner: { sizes: sizes[i] } }, bids: [{ bidder: 'adserver', params: { networkId: 1234 } }] })); console.log(adUnits);

如果它必須是 JSON 而不是對象,那么JSON.stringify之后(不要嘗試手動構建 JSON):

 const codes = '/123/468x60#/123/336x280#/123/300x600'.split('#'); const sizes = '468x60#336,280|300,250#300,600|300,250' .split('#') .map( // str is something like: '300,600|300,250' str => str.split('|').map( // substr is something like: '300,600' substr => substr.split(/[,x]/).map(Number) ) ); const adUnits = codes.map((code, i) => ({ code, mediaTypes: { banner: { sizes: sizes[i] } }, bids: [{ bidder: 'adserver', params: { networkId: 1234 } }] })); console.log(JSON.stringify(adUnits, null, 2));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM