/**
* 將CSS形式的字符串轉(zhuǎn)換為JSON
*
* @param {css字符串} css
*/
function css2json(css) {
// 移除CSS所有注釋
while ((open = css.indexOf("/*")) !== -1 &&
(close = css.indexOf("*/")) !== -1) {
css = css.substring(0, open) + css.substring(close + 2);
}
// 初始化返回值
let json = {};
while (css.length > 0) {
// 存儲第一個左/右花括號的下標
const lbracket = css.indexOf('{');
const rbracket = css.indexOf('}');
// 第一步:將聲明轉(zhuǎn)換為Object手幢,如:
// `font: 'Times New Roman' 1em; color: #ff0000; margin-top: 1em;`
// ==>
// `{"font": "'Times New Roman' 1em", "color": "#ff0000", "margin-top": "1em"}`
// 輔助方法:將array轉(zhuǎn)為object
function toObject(array) {
let ret = {};
array.forEach(e => {
const index = e.indexOf(':');
const property = e.substring(0, index).trim();
const value = e.substring(index + 1).trim();
ret[property] = value;
});
return ret;
}
// 切割聲明塊并移除空白符雹顺,然后放入數(shù)組中
let declarations = css.substring(lbracket + 1, rbracket)
.split(";")
.map(e => e.trim())
.filter(e => e.length > 0); // 移除所有""空值
// 轉(zhuǎn)為Object對象
declarations = toObject(declarations);
// 第二步:選擇器處理,每個選擇器會與它對應(yīng)的聲明相關(guān)聯(lián),如:
// `h1, p#bar {color: red}`
// ==>
// {"h1": {color: red}, "p#bar": {color: red}}
let selectors = css.substring(0, lbracket)
// 以,切割萍悴,并移除空格:`"h1, p#bar, span.foo"` => ["h1", "p#bar", "span.foo"]
.split(",")
.map(selector => selector.trim());
// 迭代賦值
selectors.forEach(selector => {
// 若不存在,則先初始化
if (!json[selector]) json[selector] = {};
// 賦值到JSON
Object.keys(declarations).forEach(key => {
json[selector][key] = declarations[key];
});
});
// 繼續(xù)下個聲明塊
css = css.slice(rbracket + 1).trim();
}
// 返回JSON形式的結(jié)果串
return json;
}
/**
* 將json對象轉(zhuǎn)換為css
*
* @param {json對象} json
*/
function json2css(json) {
return JSON.
stringify(json,4).
slice(1, JSON.stringify(json).length - 1).
replace(new RegExp(',', 'gm'), ' ').
replace(new RegExp('"', 'gm'), '').
replace(/:{/ig, "{")
}
JSON對象與CSS轉(zhuǎn)換
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
- 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來器一,“玉大人课锌,你說我怎么就攤上這事∑盹酰” “怎么了渺贤?”我有些...
- 文/不壞的土叔 我叫張陵,是天一觀的道長请毛。 經(jīng)常有香客問我志鞍,道長,這世上最難降的妖魔是什么获印? 我笑而不...
- 正文 為了忘掉前任述雾,我火速辦了婚禮,結(jié)果婚禮上兼丰,老公的妹妹穿的比我還像新娘玻孟。我一直安慰自己,他們只是感情好鳍征,可當我...
- 文/花漫 我一把揭開白布黍翎。 她就那樣靜靜地躺著,像睡著了一般艳丛。 火紅的嫁衣襯著肌膚如雪匣掸。 梳的紋絲不亂的頭發(fā)上,一...
- 文/蒼蘭香墨 我猛地睜開眼袭厂,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了球匕?” 一聲冷哼從身側(cè)響起纹磺,我...
- 正文 年R本政府宣布,位于F島的核電站惯悠,受9級特大地震影響邻邮,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜克婶,卻給世界環(huán)境...
- 文/蒙蒙 一筒严、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧情萤,春花似錦鸭蛙、人聲如沸。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至睁宰,卻和暖如春肪获,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背柒傻。 一陣腳步聲響...
推薦閱讀更多精彩內(nèi)容
- 一.Json對象與Json字符串的轉(zhuǎn)化 1.jQuery插件支持的轉(zhuǎn)換方式: $.parseJSON( jsons...
- 基本的轉(zhuǎn)換為:JSON.parse與JSON.stringify。 但是json數(shù)據(jù)中含function祖今,則轉(zhuǎn)換后...
- 1>jQuery插件支持的轉(zhuǎn)換方式: 代碼如下: $.parseJSON( jsonstr ); //jQuery...
- json字符串:var str = '{'a':1, 'b':2}'; json對象:var obj = {'a'...