【问题标题】:HashMap to JSONArray and handling the response in jqueryHashMap 到 JSONArray 并在 jquery 中处理响应
【发布时间】:2012-06-27 07:43:07
【问题描述】:

我有这个 HashMap() 对象并将其转换为 JSONArray,如下所示

JSONArray jarray = JSONArray.fromObject(myHashMap);

请注意,映射中的键始终是数字文字,但其数据类型是字符串。

以下是用于将json字符串设置为响应的代码。

response.setContentType("text/text;charset=utf-8");
response.setHeader("cache-control", "no-cache");
PrintWriter out = response.getWriter();
out.println(jarray.toString());
out.flush();

我得到的json字符串是

[{"1":{"empAge":32,"empEmail":"name@mail.com","empId":1,"empName":"myname","empTel":"33445"}]

如何获取键值为1的map中empName的值?

$.ajax({
type: "POST",
url: "/MyApp/TestAction.do",
dataType :"json",
success: function(response){
     alert(response.1[0].empName);// I get java script error in this statement
    },
    error: function(e){
        alert('Error: ' + e);
    }
 });

【问题讨论】:

    标签: java javascript jquery arrays


    【解决方案1】:

    您使用了错误的标题:

     response.setContentType("text/text;charset=utf-8");
    

    改成:

    response.setContentType("application/json;charset=utf-8");
    

    目前您将其作为字符串获取,因此您不能将其用作对象,一旦您更改标头,您将获得它作为 json 对象并能够使用它。

    附带说明,“1”不是一个很好的键,如果您可以将其替换为更具描述性的字符串,我建议您这样做。

    【讨论】:

    • 我已经如前所述更改了内容类型,并将字符串“emp”附加到键上,因此现在键看起来像“emp1”。现在脚本错误消失了,当我尝试提醒 response.emp1.empName 时,我得到了“未定义”的消息。下面是我通过 System.out [{"emp1":{"empAge":32,"empEmail":"name@mail.com","empId":1,"empName":"myname", "empTel":"33445"}]
    • 在响应中执行 console.log()(在 javascript 中)并发布你得到的内容
    • 我不知道 console.log() 的作用。但是当我执行 $.parseJSON(response) 时,结果为空。这是否意味着我的 json 字符串无效?但我已经在 jsonlint.com 中测试了该字符串,它断言该字符串是有效的。
    • console.log 记录到控制台。如果你不知道它是什么并且你正在为 web 开发,那么你就遇到了一个严重的问题 :) 我希望你知道 firebug 是什么,如果不知道然后查找并开始使用它。
    • 感谢您的回复!我已将 empAge 和 empId 的数据类型更改为 String,现在它工作正常。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-15
    • 2019-04-29
    • 1970-01-01
    • 2013-08-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多