[FUNC]ahk利用JScript解析JSON

来源:互联网 发布:java swing的gui 编辑:程序博客网 时间:2024/06/05 14:36
;~ http://www.autohotkey.com/board/topic/93300-what-format-to-store-settings-in/#entry588268json = {"version":"1","window":{"state":3,"screenX":25,"screenY":25,"width":790,"height":605,"test":{"nested":"object"}},"sidebar":{"visible":false,"width":"200"}}j := parseJson(json)MsgBox % j.versionMsgBox % j.window.screenYreturnparseJson(jsonStr){SC := ComObjCreate("ScriptControl") SC.Language := "JScript"ComObjError(false)jsCode =(function arrangeForAhkTraversing(obj){if(obj instanceof Array){for(var i=0 ; i<obj.length ; ++i)obj[i] = arrangeForAhkTraversing(obj[i]) ;return ['array',obj] ;}else if(obj instanceof Object){var keys = [], values = [] ;for(var key in obj){keys.push(key) ;values.push(arrangeForAhkTraversing(obj[key])) ;}return ['object',[keys,values]] ;}elsereturn [typeof obj,obj] ;})SC.ExecuteStatement(jsCode "; obj=" jsonStr)return convertJScriptObjToAhks( SC.Eval("arrangeForAhkTraversing(obj)") )}convertJScriptObjToAhks(jsObj){if(jsObj[0]="object"){obj := {}, keys := jsObj[1][0], values := jsObj[1][1]loop % keys.lengthobj[keys[A_INDEX-1]] := convertJScriptObjToAhks( values[A_INDEX-1] )return obj}else if(jsObj[0]="array"){array := []loop % jsObj[1].lengtharray.insert(convertJScriptObjToAhks( jsObj[1][A_INDEX-1] ))return array}elsereturn jsObj[1]}



string={hello:'world',its:{over:9000},foo:['bar']}msgbox,% jsonGet(string,"hello")msgbox,% jsonGet(string,"its.over")msgbox,% jsonGet(string,"foo[0]")obj:={hello:"world",its:{over:9000},foo:["bar"]}msgbox,% jsonBuild(obj)string={hello:'world',its:{over:9000},foo:['bar']}obj:=jsonAHK(string)msgbox,% obj.hellomsgbox,% obj.its.overmsgbox,% obj.foo.0jsonAHK(s){static o:=comobjcreate("scriptcontrol")o.language:="jscript"return o.eval("(" s ")")}jsonBuild(j) { for x,y in js.=((a:=(j.setcapacity(0)=(j.maxindex()-j.minindex()+1)))?"":x ":")(isobject(y)?jsonBuild(y):y/y||y==0?y:"'" y "'") ",";s.=x ":" (isobject(y)?jsonBuild(y):y/y||y==0?y:"'" y "'") ","return (a?"[" rtrim(s,",") "]":"{" rtrim(s,",") "}");return ("{" rtrim(s,",") "}")}jsonGet(s,k){static o:=comobjcreate("scriptcontrol")o.language:="jscript"return o.eval("(" s ")." k)}


原创粉丝点击