2016-12-22 135 views
-3

我需要轉換一個像這樣的字符串。 {0:{ Value:"0413-0415" }, 1:{ Value:"1-7800 LBO" }, 2:{ Value:"1-7804" }, 3:{ Value:"1-7805" }}將自定義集合字符串轉換爲JSON格式

成爲需要此格式的Select2的JSON字符串。 [{ id: 0, text: 'enhancement', attr: 'abc' }

我想要用id替換Value並用文本替換描述如果說明存在。如果不是將值複製到文本以及ID。

所以上面就會變成 [{ id: "0413-0415", text: "0413-0415"}]

我怎麼能去在JavaScript寫這個?

我能夠通過編寫這個函數來得到這個返回一個字符串格式我想要的。

function parseData(data) 
{ 
    data = data.replace('{','['); 
    data = data.replace(/,$/,"") + "]"; 
var re = /\{.*?\}/g; 
var index, len; 
var m = data.match(re); 

correctedData = '['; 
for (var el in m) { 

    m[el] = m[el].replace('Value','id'); 
    m[el] = m[el].replace('Description','text'); 
    if(!m[el].includes("text:")) 
    { 
    var n = m[el].lastIndexOf('}') -1; 
    m[el] = m[el].substring(0,n) + ', ' + m[el].replace('{','').replace('id','text'); 
    } 
    correctedData = correctedData + m[el] + ', ' 

} 
correctedData = correctedData.trim().replace(/,$/, ""); 
correctedData = correctedData.replace(/"/g, "'"); 
correctedData = correctedData + ']'; 

return correctedData; 
} 

但我知道這是返回一個字符串,並使用JSON.parse將無法正常工作,因爲它說它不是有效的JSON。我看着Select2並拿走了他們的例子,這也是無效的json。它只是一個對象的數組。我怎樣才能得到JavaScript把它當作一個數組而不是一個字符串。

JSFiddle我目前在哪裏。 https://jsfiddle.net/pricejt/d681sfew/

+1

您似乎在要求某人爲您編寫一些代碼。堆棧溢出是一個問答網站,而不是代碼寫入服務。請[see here](http://stackoverflow.com/help/how-to-ask)學習如何編寫有效的問題。 –

+0

您的字符串類型是有效的對象字面值,但不是[JSON](http://json.org/)字符串,如果用引號括起來的話。 –

+0

你已經用c#標記了這個問題,你如何生成這個字符串?找到一個輸出正確JSON的模塊應該不會太難。 – Thomas

回答

0

你可以使用一個正則表達式,並獲取一個新對象的部分,這個對象可以以一個想要的格式被收集到一個數組中。

var regex = /(\d+):{ Value:"([^"]*)"/g, 
 
    str = '{0:{ Value:"0413-0415" }, 1:{ Value:"1-7800 LBO" }, 2:{ Value:"1-7804" }, 3:{ Value:"1-7805" }}', 
 
    m, 
 
    data = []; 
 

 
while ((m = regex.exec(str)) !== null) { 
 
    // This is necessary to avoid infinite loops with zero-width matches 
 
    if (m.index === regex.lastIndex) { 
 
     regex.lastIndex++; 
 
    } 
 
    if (m.length >= 2) { 
 
     data.push({ id: m[1], text: m[2] }); 
 
    } 
 
} 
 

 
console.log(data);
.as-console-wrapper { max-height: 100% !important; top: 0; }

+0

謝謝,在我提出最終結果之前,我沒有刷新頁面。 – pricejt

0

我終於能夠得到這個工作。最終結果在這裏。 https://jsfiddle.net/pricejt/d681sfew/2/

function parseData(data) 
{ 
var correctedData = []; 
data = data.replace('{','['); 
data = data.replace(/,$/,"") + "]"; 
var re = /\{.*?\}/g; 
var index, len; 
var m = data.match(re); 

for (var el in m) { 

    m[el] = m[el].replace('Value','"id"'); 
    m[el] = m[el].replace('Description','"text"'); 
    if(!m[el].includes("text:")) 
    { 
    var n = m[el].lastIndexOf('}') -1; 
    m[el] = m[el].substring(0,n) + ', ' + m[el].replace('{','').replace('id','text'); 
    } 
    correctedData.push($.parseJSON(m[el])); 

} 

return correctedData; 
} 
相關問題