HTMLのタグ属性文字列をJSON文字列化
例えば
以下の文字列を
foo="fooText" bar="barText" attr="attr's text"
以下のJSON文字列にしたい
{foo:"fooText",bar="barText",attr:'attr\'s text'}
昔は正規表現を利用していた。
正規表現を利用してループ処理して色々やってJSON文字列を作成していました(JSmartyのCompiler.jsのCompiler._attribute関数)。でも良く考えたら機械的に変換できるのでコード書き換えました。
というわけで以下のコード
function genAttrToJSONStr(s) { var c, i, f, b = s.split(''); for(i=0,f=s.length;i<=f;i++) { switch(b[i]) { case ' ': case '\t': case '\r': case '\n': b[i++] = ','; while(b[i] <= ' ') b[i++] = ''; break; case '=': b[i] = ':'; break; case '"': case "'": c = b[i]; while(b[++i] != c); if(b[i-1] == '\\') i--; break; }; }; return '{' + b.join('') + '}'; }
// {foo:"fooText",bar:"barText",attr:"attr's text"} genAttrToJSONStr('foo="fooText" bar="barText" attr="attr\'s text"'); // {attr:false,param:'fo " o',param:"foo"} genAttrToJSONStr('attr=false param=\'fo " o\'\n\n param="foo"');
まぁ
JavaScriptでやる必然性はないよなと…。(注:処理が甘い部分あるので無限ループに陥る場合があります。)