首页 新闻 会员 周边

关于JS解析JSON的问题

0
悬赏园豆:10 [已解决问题] 解决于 2014-01-05 17:06

如题:

在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代码呢?

有机物的主页 有机物 | 初学一级 | 园豆:19
提问于:2014-01-05 16:16
< >
分享
最佳答案
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);
// obj.data is array
收获园豆:10
Ninja_Lu | 菜鸟二级 |园豆:289 | 2014-01-05 16:20

就相当于我要将每个大括号中的数据当成一个字符串取出来。

var obj=eval(json);之后,我怎么取呢?

有机物 | 园豆:19 (初学一级) | 2014-01-05 16:23

@有机物: obj.data[0].UserID .....

Ninja_Lu | 园豆:289 (菜鸟二级) | 2014-01-05 16:24

@Ninja_Lu: 不是这样的,我的意思是,我得到一个JSON格式为:

[{1},{2},{3}],当我解析完了之后,分别弹出alert({1});其中,把{1}看成一个整体输出出来。

有机物 | 园豆:19 (初学一级) | 2014-01-05 16:25

@有机物: 可以的,直接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 | 园豆:289 (菜鸟二级) | 2014-01-05 16:28

@Ninja_Lu: 对,就是要这样的字符串,这个我直接丢到我写好的一个方法里面去,因为我是根据整个JSON来分页的。

有机物 | 园豆:19 (初学一级) | 2014-01-05 16:29

@有机物: 还有,直接console.log(obj.data[0])在console里看不是更好么,非要用alert

Ninja_Lu | 园豆:289 (菜鸟二级) | 2014-01-05 16:30

@Ninja_Lu: 不是,alert只是测试我取出的字符串是不是我要的。你还能帮我取出来?

有机物 | 园豆:19 (初学一级) | 2014-01-05 16:31

@有机物: 

 …………

那应该是

{ 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]本身就是字符串了。

好奇怪的感觉

Ninja_Lu | 园豆:289 (菜鸟二级) | 2014-01-05 16:33

@有机物: 或者,另一种方式是:

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 | 园豆:289 (菜鸟二级) | 2014-01-05 16:37

@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]

}

我就说,我上面的怎么弹出{每一个大括号的内容}这样的结果。

有机物 | 园豆:19 (初学一级) | 2014-01-05 16:40

@有机物: 

我总结一下吧:

你的字符串是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 | 园豆:289 (菜鸟二级) | 2014-01-05 16:50

@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格式。

有机物 | 园豆:19 (初学一级) | 2014-01-05 16:55

@有机物: OK,当然可以不包在{"data":xx}里,这只是一个建议,因为这样的解析会更加的安全。

那么从不修改任何东西出发,要得到你要的字符串,我提供了一种办法:

var obj = eval(json);
for(var i=0; i<obj.length; i++)
{
    alert(JSON.stringify(obj[i]));
}

希望这是你所想要的。

Ninja_Lu | 园豆:289 (菜鸟二级) | 2014-01-05 17:04

@Ninja_Lu: 嗯,就是我想要的,谢谢啦!

有机物 | 园豆:19 (初学一级) | 2014-01-05 17:05
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册