imasara2script
WSHやHTAなどのプログラムサンプルの公開用ブログ
2017年4月11日火曜日
JSON形式テキスト作成用関数
用途・目的
JSON形式テキストを作成する関数は
先日作成済み
でしたが、変数名などがゴチャゴチャしているのが気になっていました。
イチから書き直して関数や変数の名前と流れを整理して少しだけ短くシンプルに出来ました。
ソース
toJSON=function(){ var gt=function(o){return typeof(o)}, gc=function(o){return o.constructor}, objT={}, objC={}, fStr, rNg=/\n/g, nt='\n\t', main objT[gt('')] = fStr = function(s){return '"'+s.replace(/\\/g,'\\\\').replace(/\r/g,'\\r').replace(/\n/g,'\\n').replace(/"/g,'\\"')+'"'} objT[gt(0)] = objT[gt(true)] = objT[gt(gt.und)] = objC[gc(/1/)] = function(v){return v} objC[gc(new Date())] = function(o){return 'new Date("'+o+'")'} objC[gc(gc)] = function(o){return インデント調整(o)} objC[gc({})] = function(o){ var a=[], i=0 forIn(o,function(n,v){ a[i++] = fStr(n)+':'+(main(v)+'').replace(rNg,nt) }) return '{'+nt+a.join(','+nt)+'\n}' } objC[gc([])] = function(o){ var a0=[], s, a1=[], i=0 for0L(o,function(i,v){a0[i]=main(v)}), s='['+nt+a0.join(','+nt)+'\n]' forIn(o,function(n,v){ !a0[n] && (a1[i++] = 'a['+fStr(n)+']='+main(v)) }) return a1[LEN] ? (インデント調整(function(){ var a=sss aaa111 return a })+'()').replace(/sss/,s.replace(rNg,nt)).replace(/aaa111/,a1.join(nt)) : s } return main=function(o){ var t=gt(o), r=o===null ? 'null' : objT[t] ? objT[t](o) : objC[gc(o)](o); return r } }()
サンプル
toJSON=function(){ var gt=function(o){return typeof(o)}, gc=function(o){return o.constructor}, objT={}, objC={}, fStr, rNg=/\n/g, nt='\n\t', main objT[gt('')] = fStr = function(s){return '"'+s.replace(/\\/g,'\\\\').replace(/\r/g,'\\r').replace(/\n/g,'\\n').replace(/"/g,'\\"')+'"'} objT[gt(0)] = objT[gt(true)] = objT[gt(gt.und)] = objC[gc(/1/)] = function(v){return v} objC[gc(new Date())] = function(o){return 'new Date("'+o+'")'} objC[gc(gc)] = function(o){return インデント調整(o)} objC[gc({})] = function(o){ var a=[], i=0 forIn(o,function(n,v){ a[i++] = fStr(n)+':'+(main(v)+'').replace(rNg,nt) }) return '{'+nt+a.join(','+nt)+'\n}' } objC[gc([])] = function(o){ var a0=[], s, a1=[], i=0 for0L(o,function(i,v){a0[i]=main(v)}), s='['+nt+a0.join(','+nt)+'\n]' forIn(o,function(n,v){ !a0[n] && (a1[i++] = 'a['+fStr(n)+']='+main(v)) }) return a1[LEN] ? (インデント調整(function(){ var a=sss aaa111 return a })+'()').replace(/sss/,s.replace(rNg,nt)).replace(/aaa111/,a1.join(nt)) : s } return main=function(o){ var t=gt(o), r=o===null ? 'null' : objT[t] ? objT[t](o) : objC[gc(o)](o); return r } }() インデント調整=function(f){ var s=f+'', 最終行=s.match(/([\t ]*)\}$/)[1]; return s.replace(new RegExp('\\n'+最終行,'g'),'\n') } for0L = function(arr,fun){for(var i=0,L=arr[LEN],res;i<L;i++){if(res=fun(i,arr[i])){return res}}} forIn = function(obj,fun){var name,res; for(name in obj){if(res=fun(name, obj[name])){return res}}} LEN='length' str=toJSON({ 0:'"abc"\r\n012', 1:{ a:2, b:function(){ confirm(1) }, c:function(){ var a=[1,2,3] a.d = 10 a.e = 11 return a }() }, f:new Date(), g:null, h:false, i:/123/gi, j:toJSON.und }) eval('obj = '+str) confirm(str+'\n\n'+toJSON(obj))
動作テスト
0 件のコメント:
コメントを投稿
次の投稿
前の投稿
ホーム
登録:
コメントの投稿 (Atom)
0 件のコメント:
コメントを投稿