我正在我的JSP中进行Ajax调用,该调用正在接收JSON响应。
运行alert('Ajax Response ' + respArr);
会显示以下屏幕:
Java服务器端代码:
public void doGet(HttpServletRequest request, HttpServletResponse res) throws IOException, ServletException {
try {
String fromDate = request.getParameter("drFrom");
String toDate = request.getParameter("drTo");
JSONArray jsonArray = chartData.getCCSBJson(fromDate, toDate);
res.setContentType("application/json");
res.getWriter().write(jsonArray.toString());
}
JavaScript:
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
if(xmlhttp.responseText != null) {
var respArr = xmlhttp.responseText;
var jsonData = eval("(" + respArr + ")");
alert('JSON Chart ' + jsonData); // The line from above
var obj = JSON.parse(xmlhttp.responseText);
alert('JSON Parse' + obj);
正在返回的JSON:
[
{
"chart":{
"caption":"",
"exportDataFormattedVal":"1",
"numberPrefix":"",
"showexportdatamenuitem":"1",
"xAxisName":"Bureau usage",
"yAxisName":"count"
},
"data":[
{
"label":"SB AutoDecison",
"value":"0"
},
{
"label":"CC AutoDecison",
"value":"0"
},
{
"label":"CC Judgemental",
"value":"0"
},
{
"label":"SB Judgemental",
"value":"0"
}
]
}
]
警报结果:
alert('JSON Chart ' + jsonData) // JSON Chart[object Object]
alert('JSON Parse ' + obj); // JSON parse[object Object]
我想要的是解析对象并从内容中生成Excel表格。
当我尝试循环时:
var jqueryData = jQuery.parseJSON(respArr);
var obj = JSON.parse(xmlhttp.responseText);
for (var i in obj) {
alert('For loop string' + obj[i]);
}
使用JavaScript代码
会抛出7或8个警报for (i = 0; i < 5; i++) {
alert(i + ' of respArr ' + respArr[i]);
}
给JSON的一封又一封的信件:[
,{
,"
,c
,h
等,以便循环的每次迭代
我是否可以直接遍历JSON,如respArr[0].data
或respArr[0].chart
?
答案 0 :(得分:1)
您的json响应具有以下结构:
[
{
"chart":{
"caption":"",
"exportDataFormattedVal":"1",
"numberPrefix":"",
"showexportdatamenuitem":"1",
"xAxisName":"Bureau usage",
"yAxisName":"count"
},
"data":[
{
"label":"SB AutoDecison",
"value":"0"
},
{
"label":"CC AutoDecison",
"value":"0"
},
{
"label":"CC Judgemental",
"value":"0"
},
{
"label":"SB Judgemental",
"value":"0"
}
]
}
]
访问最外层对象的第一个元素,如response[0]
。
然后是其中的图表对象,如response[0].chart
,依此类推。
http://jsonformatter.curiousconcept.com/将帮助格式化JSON并使其可读。
答案 1 :(得分:1)
查看 FIDDLE
您可以直接访问对象的属性。
$(function () {
var q = [{
"chart": {
"caption": "",
"exportDataFormattedVal": "1",
"numberPrefix": "",
"showexportdatamenuitem": "1",
"xAxisName": "Bureau usage",
"yAxisName": "count"
},
"data": [{
"label": "SB AutoDecison",
"value": "0"
}, {
"label": "CC AutoDecison",
"value": "0"
}, {
"label": "CC Judgemental",
"value": "0"
}, {
"label": "SB Judgemental",
"value": "0"
}]
}];
console.log(q);
console.log(q[0].data);
q[0].data.forEach(function (item) {
console.log(item.label);
console.log(item.value);
});
});
答案 2 :(得分:1)
有几件事:
首先,您的Java servlet并没有真正返回&#34;字符串&#34;。当您编写jsonArray.toString()
时,是的,您正在将数组转换为字符串,但这仅仅是为了通过网络编写它。 HTTP是一种文本协议。那么,在某种意义上,doGet
方法实际返回的是HTTP响应(它恰好是文本,它很可能是二进制)。
这样,当客户端(在这种情况下,您的JavaScript通过XMLHttpRequest
)向您的服务器(您的servlet)发出GET
请求时,它将返回JSON响应(是的,如同文本)。在这种情况下,您的xmlhttp.responseText
变量应该包含您在问题中显示的JSON。
致电其中一个:
JSON.parse(xmlhttp.responseText)
jQuery.parseJSON(xmlhttp.responseText)
$.parseJSON(xmlhttp.responseText)
所有人都应该返回相同的对象。使用此对象,您可以按照自己的方式访问其属性。以下应该工作:
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
if (xmlhttp.responseText != null) {
var json = xmlhttp.responseText;
var arr = JSON.parse(json);
var data = arr[0].data; // This is what you want to do?
var chart = arr[0].chart; // This is what you want to do?
// try running alert(chart.xAxisName);
// and so on
旁注:当您运行alert(obj);
obj
作为对象时,您会看到[object Object]
,因为这就是JavaScript将对象表示为字符串的方式。如果你想看到JavaScript对象的内部结构,正如其他人所指出的那样,你最好使用console.log(obj)
。 (此外,升级或切换到更好的浏览器。您将可以访问更好的调试工具。)