如题:
在ASP.NET中,通过JS调用方法,得到JSON数据,格式:
var json=[{"UserID":"USERID1","UserName":"UserName1","UserPwd":"UserPwd1","CreateName":"CreateName1","CreateTime":"CreateTime1","UserType":"UserType1","UserState":"UserState1"},{"UserID":"USERID2","UserName":"UserName2","UserPwd":"UserPwd2","CreateName":"CreateName2","CreateTime":"CreateTime2","UserType":"UserType2","UserState":"UserState2"}]
这里是两行数据。
然后,我需要解析这个json
var obj=eval(json);
得到的是两个长度的[object object][object object]
下面的我就不知道该怎么解析了,我需要得到的是下面的数据结果:
"UserID":"USERID1","UserName":"UserName1","UserPwd":"UserPwd1","CreateName":"CreateName1","CreateTime":"CreateTime1","UserType":"UserType1","UserState":"UserState1"
就是每一条都是大括号里面包含的结果集,这样,我容易使用数据。改怎么写JS代码呢?
这样搞:
var json= { data: [{"UserID":"USERID1","UserName":"UserName1","UserPwd":"UserPwd1","CreateName":"CreateName1","CreateTime":"CreateTime1","UserType":"UserType1","UserState":"UserState1"},{"UserID":"USERID2","UserName":"UserName2","UserPwd":"UserPwd2","CreateName":"CreateName2","CreateTime":"CreateTime2","UserType":"UserType2","UserState":"UserState2"}] } var obj = eval(json); // obj.data is array
就相当于我要将每个大括号中的数据当成一个字符串取出来。
var obj=eval(json);之后,我怎么取呢?
@有机物: obj.data[0].UserID .....
@Ninja_Lu: 不是这样的,我的意思是,我得到一个JSON格式为:
[{1},{2},{3}],当我解析完了之后,分别弹出alert({1});其中,把{1}看成一个整体输出出来。
@有机物: 可以的,直接alert(obj.data[0])就行,obj.data[0]就是parser好的js object。
难度你要弄出{"UserID":"USERID1","UserName":"UserName1","UserPwd":"UserPwd1","CreateName":"CreateName1","CreateTime":"CreateTime1","UserType":"UserType1","UserState":"UserState1"}这样的字符串?
你要怎么用这段json数据呢?
@Ninja_Lu: 对,就是要这样的字符串,这个我直接丢到我写好的一个方法里面去,因为我是根据整个JSON来分页的。
@有机物: 还有,直接console.log(obj.data[0])在console里看不是更好么,非要用alert
@Ninja_Lu: 不是,alert只是测试我取出的字符串是不是我要的。你还能帮我取出来?
@有机物:
…………
那应该是
{ data: ['{"UserID":"USERID1","UserName":"UserName1","UserPwd":"UserPwd1","CreateName":"CreateName1","CreateTime":"CreateTime1","UserType":"UserType1","UserState":"UserState1"}','{"UserID":"USERID2","UserName":"UserName2","UserPwd":"UserPwd2","CreateName":"CreateName2","CreateTime":"CreateTime2","UserType":"UserType2","UserState":"UserState2"}'] }
这样的格式啊,现在的情况是,你得到的本身就是object格式的,一parse当然就是object了,你可以尝试一下输出上面的格式,这样obj.data[0]本身就是字符串了。
好奇怪的感觉
@有机物: 或者,另一种方式是:
var json= { data: [{"UserID":"USERID1","UserName":"UserName1","UserPwd":"UserPwd1","CreateName":"CreateName1","CreateTime":"CreateTime1","UserType":"UserType1","UserState":"UserState1"},{"UserID":"USERID2","UserName":"UserName2","UserPwd":"UserPwd2","CreateName":"CreateName2","CreateTime":"CreateTime2","UserType":"UserType2","UserState":"UserState2"}] } var obj = eval(json);
然后
alert(JSON.stringify(obj.data[0]))的方式,这样就将object再转换回json串了。
你对比一下,看哪个符合你的要求吧。
@Ninja_Lu: 我的到的格式是这样的:[{"UserID":"USERID1","UserName":"UserName1","UserPwd":"UserPwd1","CreateName":"CreateName1","CreateTime":"CreateTime1","UserType":"UserType1","UserState":"UserState1"},{"UserID":"USERID2","UserName":"UserName2","UserPwd":"UserPwd2","CreateName":"CreateName2","CreateTime":"CreateTime2","UserType":"UserType2","UserState":"UserState2"}]
现在要取的就是上面的那样的,
我是这样操作的:
var json=上面我的字符串。
var obj=eval(json);得到的是三个[object object]
然后,我就循环:
for(var i=0;i<obj.length;i++)
{
alert(obj[0]);//结果,弹出的是[object object]
}
我就说,我上面的怎么弹出{每一个大括号的内容}这样的结果。
@有机物:
我总结一下吧:
你的字符串是someString.
1. 为了标准起见,建议先包在一个{}里,就是var json = '{"data":' + someString + '}';
2. 然后var obj = eval(json).这时得到的是一个object,其中obj.data是一个object[],并不是字符串。(除非自己手动处理someString,不然用eval一定是object)
3. 拿出obj.data[0],这是一个object,可以用JSON.stringify()函数将这个obj再转换成json串。
4. 最好用JSON.parse()来解析,避免eval().
看你的需求吧,我同样也提供了修改someString的格式来直接解析出字符串的方法(在上面的回复中有),嗯……
@Ninja_Lu:
首先,我很感谢你能帮我回答问题。这里,我把我的需求重点的描述一下。希望你能帮我得到我要的数据。
第一,我获取JOSN字符串,先取得数据,得到所需数据的泛型集合。
代码:
string Json = "";
System.Web.Script.Serialization.JavaScriptSerializer js = new System.Web.Script.Serialization.JavaScriptSerializer();
Json = js.Serialize(t);//其中,t就是泛型集合。
return Json;
这个时候,return 的JSON就是下面的数据格式:
var json=[{"UserID":"USERID1","UserName":"UserName1","UserPwd":"UserPwd1","CreateName":"CreateName1","CreateTime":"CreateTime1","UserType":"UserType1","UserState":"UserState1"},{"UserID":"USERID2","UserName":"UserName2","UserPwd":"UserPwd2","CreateName":"CreateName2","CreateTime":"CreateTime2","UserType":"UserType2","UserState":"UserState2"}]
我之所以没有将格式改为你那样的:var json = '{"data":' + someString + '}';是因为,我在其它的地方用起来会更加方便。所以,后面处理的都是我后台返回过来的这样的JSON格式。
@有机物: OK,当然可以不包在{"data":xx}里,这只是一个建议,因为这样的解析会更加的安全。
那么从不修改任何东西出发,要得到你要的字符串,我提供了一种办法:
var obj = eval(json); for(var i=0; i<obj.length; i++) { alert(JSON.stringify(obj[i])); }
希望这是你所想要的。
@Ninja_Lu: 嗯,就是我想要的,谢谢啦!