在本项目的进行中,有人问了我个很有意思的问题,就是如何将一个String 转化为 Object(如果是动态语言就很方便了,这里是ActionScript)。
首先让我们来看一下他是在什么情况下遇到这个问题的,他想将一个CSV类型的文件,通过FileStream读入,然后经过程序解析后,放入ArrayCollection中,这个ArrayCollection是与 一个DataGrid的dataProvider绑定的。
首先,他不清楚要读入CSV文件有多少列,所以需要在程序中 去动态添加 DataGrid 的Columns.
如:
var tagColumn:DataGridColumn=new DataGridColumn();
tagColumn.headerText=fieldName[j];
tagColumn.dataField=fieldName[j];
params.columns.concat(tagColumn);
他将从CSV中的一行解析成如下这种个格式:
var str:String={name:"Kevin",sex:"male",nationality:"china"}
而当执行 ArrayCollection.addItem(str) 的时候是错误的
如果执行 ArrayCollection.addItem({name:"Kevin",sex:"male",nationality:"china"}) 的时候是正确的
很明显 ArrayCollection.addItem()方法允许你增加对象,这个时候你则需要将 str 转化为 Object.
var convertStr:String=str.slice(1,str.length-1);
var items:Array=convertStr.split(",");
var obj:Object=new Object();
for(var i:String in items){
var pros:Array=i.split(":");
obj[pros[0]]=pros[1].slice(1,pros[1].length-1);
}
很简洁,现在就可以 ArrayCollection.addItem(obj) 了。