我试图清理一个JSON字符串(从json对象转换而来),我发现许多人使用.replace()方法这样做。但是,这样做时,我的代码如下所示:
scrape(url).then(result => {
final = JSON.stringify(result);
final = final.replace(/['"]+/g, "");
final = final.replace(/[{]+/g, "");
final = final.replace(/[}]+/g, "");
final = final.replace(/[:]+/g, ": ");
final = final.replace(/,+/g, ";");
return final;
});
虽然此方法确实可以按我想要的方式返回“ final”,但它似乎效率不高,并且代码确实很笨拙。我的最终目标是删除引号,大括号,将“:”替换为“:”,并将所有逗号更改为半冒号。有更好/更清洁的方法吗?
编辑: 输入字符串如下所示:
{
'$primary': '#ea80fc',
'$p_light': '#ffb2ff',
'$p_dark': '#b64fc8',
'$secondary': '#b64fc8',
'$s_light': '#f9683a',
'$s_dark': '#870000'
}
答案 0 :(得分:2)
给出实际数据,在JSON.parse
之后,您将具有以下结构:
{
'$primary': '#ea80fc',
'$p_light': '#ffb2ff',
'$p_dark': '#b64fc8',
'$secondary': '#b64fc8',
'$s_light': '#f9683a',
'$s_dark': '#870000'
}
将其转换为合法的SCSS根本不需要将长长的替换链应用于JSON字符串。它只需要将JSON解析为普通的JS对象,然后遍历键/值以形成SCSS字符串:
function jsonToSCSS(stringdata=``, data={}) {
/* JSON.parse can throw. Always be ready for that. */
try { data = JSON.parse(stringdata); }
catch (e) { console.warn(e); return ``; }
return Object.keys(data)
.map(key => `${key}: ${data[key]};`)
.join('\n');
}
完成。该函数的输出现在是正常的格式化字符串:
$primary: #ea80fc;
$p_light: #ffb2ff;
$p_dark: #b64fc8;
$secondary: #b64fc8;
$s_light: #f9683a;
$s_dark: #870000;
现在,您可以直接写入或将其自身包裹在格式中的文件写入其中:
const SCSS = jsonToSCSS(inputdata);
const qualified = `.someclass { ${SCSS} }`;
答案 1 :(得分:1)
更简化
scrape(url).then(result => {
return JSON.stringify(result.replace(/['"{}]+/g, "").replace(/[:]+/g, ":").replace(/,+/g, ";"));
});