2017-03-17 11 views
1

希望這個問題能達到SO的標準。我從來沒有發佈過,但在尋找一些關於接近我已被分配的任務的信息。方法學方法 - json字符串/輸出

我有一個網頁表單的信息,一些簡單的領域,我已經有了打算。

頁輸出表單字段的JSON字符串,並將其寫入到一個文本文件中。

我需要做的是使用的關鍵是:值,以填補在bash腳本輸出到hotfolder中攝取到生產環境中。

的「addmore」陣列需要確定產生的文件名的字段的數量。我應該補充說這是動態的,「addmore」數組可能包含1個條目,或者在技術上可以包含無限數量。但是這個數字會波動。

JSON輸出:

{"formatcode":"JFM","serialnumber":"555","callletters":"555","rotator":"555","addmore":["555","444","333",""]}

如何使用關鍵:值對輸出到這個文件象下面這樣:

{"type":"sequential","items":[ 
    {"filename": "/assets/$formatcode/$serialnumber/$addmore1", "description":"First item"}, 
    {"filename": "/assets/$formatcode/$serialnumber/$addmore2", "description": "Second item"}, 
    {"filename": "/assets/$formatcode/$serialnumber/$addmore3", "description": "Third item"} 
]} 
+0

描述爲動態且必要的嗎?不知道如果沒有1:「First」的地圖,一直到可能的輸入的最大數量,您將如何生成這些數據。 「項目1」,「項目2」會簡單得多 –

+0

好點 - 沒有說明不重要。它不是動態的,可以保持任何東西。 – fcamp

+0

'addmore'是一個數組,你想使用什麼值?你怎麼知道你想要生成3行? Imo最好的方法是不要在這裏尋找一個通用的解決方案,而是寫一個接受對象並返回這個輸出的小函數。 – Thomas

回答

0

這應該做的伎倆,我使用ES6字符串模板創建動態文件名和說明。最終的目標應該有addmore.lengthitems,所以我們基於data.addmore減少,創建基本對象作爲出發點({ type: "sequential", items: [] })和推動態字符串爲output.items在每次迭代。

const data = { 
    "formatcode":"JFM", 
    "serialnumber":"555", 
    "callletters":"555", 
    "rotator":"555", 
    "addmore":[ 
     "555", 
     "444", 
     "333", 
    ] 
}; 

const desiredOutput = data.addmore.reduce((p, c, index) => { 
    p.items.push({ 
     filename: `/assets/${data.formatcode}/${data.serialnumber}/${c}`, 
     description: `Item ${index + 1}` 
    }); 
    return p; 
}, { 
    type: "sequential", 
    items: [] 
}); 

console.log(desiredOutput); 

如果沒有可用的ES6做,你可以把箭頭功能爲常規功能,並使用+毗連運算,而不是字符串模板。

+0

這看起來非常接近我所需要的 - 我會稍微測試並回復你,但這看起來很完美,我相信我完全理解你在這裏做的是什麼。 – fcamp

+1

你爲什麼使用reduce?地圖不簡單嗎? 'var desiredOutput = {type:「sequential」,items:data.addmore.map((more,index)=>({...}))}' – Thomas

+0

@Thomas我使用'reduce',因爲我減少了一個形式到另一個,我覺得它更習慣。你的「地圖」方法同樣很好,它們在性能方面可能相同。至於「簡單」,我認爲這取決於開發者對「簡單」的定義;我不會將任何解決方案定義爲「複雜」。 –