2011
Nov
11
剛剛在 Javascript 想要把 Array 轉成 Json string ,上網找一些別人寫好的來用,結果每個都失敗,有些連跑都跑不過,不然就是 Array key 不見了,變成 index , 0 1 2 3的索引,真是氣死人,後來花了 5 分鐘自已寫一個,還是自已寫的最順手。
Array 轉換成 Json String
Example
- function jsonToString(arr) {
- var s="";
- if( arr instanceof Array || arr instanceof Object){
- var isObj=0;
- //check value type
- for(key in arr){
- if( isNaN(parseInt(key)) ){ //key is string
- isObj=1;
- }
- else{
- //key is index , check sort
- var na=arr.length;
- var tmp=arr;
- //hack for ie
- arr=Array();
- for(var j=0;j<na;j++){
- if( typeof(tmp[j])=="undefined" ){
- arr[j]="";
- }
- else{
- arr[j]=tmp[j];
- }
- }
- }
- break;
- }
- for(key in arr){
- var value=arr[key];
- if( isObj ){
- if(s){s+=',';}
- s+='"'+key+'":'+jsonToString(value);
- }
- else{
- if(s){s+=',';}
- s+=jsonToString(value);
- }
- }
- if(isObj)
- s='{'+s+'}';
- else
- s='['+s+']'
- }
- else{
- if(!isNaN(parseInt(arr))){
- s+=arr;
- }
- else{
- s='"'+arr+'"';
- }
- }
- return s;
- }
Json String 轉換成 Array
Example
- function stringToJson(json){
- eval('var s='+json+';');
- return s;
- }
執行結果
測試有 key 的 Array , 索引值為數字的 Array
Example
- var a=Array();
- a["a"]=Array("2","3","40");
- a["b"]=5;
- debug(jsonToString(a));
- //output: {"a":[2,3,40],"b":5}
- b=Array();
- b[0]=Array("2","3","40");
- b[1]=5;
- debug(jsonToString(b));
- //output: [[2,3,40],5]
- debug(stringToJson('{"a":[2,3,40],"b":5}'));
- /*output
- Array{
- a = 2,3,40
- b = 5
- }
- */
測試索引值中間有缺的 Array
Example
- var b=Array();
- b[0]=5;
- b[2]=10;//漏掉一個
- b[3]=Array();
- b[3]["a"]="abc";
- debug(jsonToString(b));
- //output [5,"",10,{"a":"abc"}]