我需要像这样转换一个字符串。
{0:{ Value:"0413-0415" }, 1:{ Value:"1-7800 LBO" }, 2:{ Value:"1-7804" }, 3:{ Value:"1-7805" }}
成为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/
答案 0 :(得分: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; }
答案 1 :(得分: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;
}