各位好!
    小弟有问题求教各位,谢谢了!
    问题:
    1、服务端从数据库中获取到一个实体,并把这个实体转换成json。即,从数据库获得list集合,然后把这个集合中的ID和NAME数据字段拿出来,组成一个map(ID为键值,name为值)。
    代码:
public String execute() {
List<Dept> depts = null;
Map<String,String> dept_map = new HashMap<String,String>();
try {
out = response.getWriter();
response.setContentType("text/html;charset=UTF-8");
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
depts = baseService.find("from Dept d");
if (depts.size() > 0) {
for (int i=0;i<depts.size();i++) {
Dept d = depts.get(i);
dept_map.put(d.getId().toString(),d.getName());
}


} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();

} finally {
System.out.println(dept_map);//查看MAP的数据
System.out.println(JSONSerializer.toJSON(dept_map));//查看生成的json数据
out.print(JSONSerializer.toJSON(dept_map));
}

return null;
生成的json数据格式如下:
        {"2":"市场部","1":"研发部"}
前台处理JS:
     $.post("QueryMenu.action","",function(data) {
alert(data);
$.each(data,function(idx,item) {
alert("the item is:" + item);
alert("the key is:" + item.key);
if (idx == 0 )
return true;
$("<option value="+item.key + ">"+ item.value + "</option>").appendTo(".dept");
alert("the value is :" + item.value);
});
},"json");
这样处理返回的json数据不正确。得到的undefine。
请问,我要怎么改,才能正常解析json数据?

解决方案 »

  1.   

    struts2 本身就有一个struts-json 的一个插件...但是你的这个data 如果返回的正确也不应该是 undefine啊..你看看后台生成的数据是不是有问题!
      

  2.   

    刚才我没有说清楚,不好意思。
    返回的data格式和后台转换的时候是一样的。
    只是在解析的时候,取到的键名和值是undefine的。这个问题是解析js写的有问题。所以我问一下,怎么解析这种json:
    {"2":"市场部","1":"研发部"}
      

  3.   

    我上面没有说清,返回的data格式是正确的,和转换的是一样的。出现undefine的是在解析的时候,也就是下面这个代码执行的时候:
    $.each(data,function(idx,item) {
                alert("the item is:" + item);
                alert("the key is:" + item.key);
                if (idx == 0 )
                    return true;
                $("<option value="+item.key + ">"+ item.value + "</option>").appendTo(".dept");
                alert("the value is :" + item.value);
            });
    通过alert,发现item、key、value都是undefine。
    这个要就是生成的json格式不对,要就是解析的js不正确。
    如果生成的数据正确,那么要怎么样才能正常解析如下的json数据呢:
    {"2":"市场部","1":"研发部"}
      

  4.   

    $.post("QueryMenu.action","",function(data) {
          $.each(data,function(key,value) {
                alert("the key is:" + key);
                $("<option value="+key + ">"+ value + "</option>").appendTo(".dept");
                alert("the value is :" +value );
            });
        },"json");
      

  5.   

    用fireBug在前台页面看哈你服务器端返回的究竟是什么东西,然后根据返回数据的格式,来写js就不会有问题了。
      

  6.   

    dateType=json或者用$.getJSON()方法
      

  7.   

    乱码问题已经解决,解决办法:
    在response.getWriter();
    之前,加上这个:
    response.setContentType("text/json;charset=UTF-8");
    我之前把这句代码放在response.getWriter();之后,所以出现乱码。在些,忠心的谢谢各位!
      

  8.   

    ajax请求时要设置
    $.ajax{
    type:json,
    ......
    }
    你用 string JSON.stringify(string)弹出alert(string)看看得到什么结果
    可以用 string JSON.stringify(string) 转换试试