我试图解析以下JSON响应:
{
"AgApplyTableE*!": [
{
"Index": 1,
"StringVal": "Error: Enabled virtual server 3 has no IP address.U+0085Error: Apply not done. Use 'diff' to see pending changes,U+0085 then use configuration menus to correct errors.U+0085"
}
]
}
这是我的代码:
$('#applyfailreason').click(function (){
var t = $(this);
var DeviceName = $('.DeviceName').val();
var Username = $('.Username').val();
var Password = $('.Password').val();
$.ajax({
method: 'GET',
url: 'http://' + DeviceName + '/config/AgApplyTable',
headers: {
"Authorization": "Basic " + btoa('' + Username + '' + ":" + '' + Password + '')
},
dataType: 'json',
contentType: 'application/json',
success: function(data) {
var test = JSON.stringify(data);
console.log(test);
},
statusCode: {
406 : function() {
alert('There is an unexpected string in your data.\nFix the error and try again.');
},
401 : function() {
alert('Wrong username or password.');
}
},
});
});
我在控制台上得到以下内容(没关系):
{"AgApplyTableE*!":[{"Index":1,"StringVal":"Error: Enabled virtual server 3 has no IP address.U+0085Error: Apply not done. Use 'diff' to see pending changes,U+0085 then use configuration menus to correct errors.U+0085"}]}
但我想只打印" StringVal"超出JSON响应。 尝试:
var test2 = JSON.stringify(data.StringVal);
console.log(test2);
给出:
undefined
我还尝试了以下(使用dataType: 'jsonp',
):
var test4 = JSON.parse(data.StringVal);
但是Chrome会向一个奇怪的URI(实际上提供200OK)发送GET请求:
config/AgApplyTable?callback=jQuery111306132095118518919_1436256387242&_=1436256387244
我收到以下错误:
Uncaught SyntaxError: Unexpected token :
任何想法如何仅打印到控制台" StringVal"超出JSON响应?
感谢。
答案 0 :(得分:2)
您的响应是一个包含一个名为“AgApplyTableE *!”的属性的对象,该属性是一个包含一个元素的数组,该元素是一个包含属性“StringVal”的对象。
所以你必须通过data["AgApplyTableE*!"][0].StringVal
访问它。
答案 1 :(得分:1)
使用console.log(data['AgApplyTableE*!'][0].StringVal)
在你的回复中,没有StringVal
这样的东西可以作为数据的直接suboridnate。属性StringVal
位于内部对象AgApplyTableE*!
内,因此data.StringVal未定义。
此外,我在此处看到的另一个问题是,您{{}}重新{{}}然后尝试访问该属性stringify
。
如果你StringVal
,你stringify
变量将是一个字符串,字符串没有属性test
(除非你在原型中设置它)
编辑:
添加了缺少的StringVal
索引。
答案 2 :(得分:1)
尝试
var test2 = data["AgApplyTableE*!"][0].StringVal;
console.log(test2);
答案 3 :(得分:0)
我认为那是因为你在这里有两个级别,而不仅仅是一个级别。为了获得这个价值,你可能需要像
这样的东西var test2 = JSON.parse(data);
console.log(test2["AgApplyTableE*!"][0].StringVal);
Altough我不确定AgApplyTableE *!这里是一个非常好的标识符。可能你可以改变其他东西,然后你也可以使用。达成会员的记号。
答案 4 :(得分:0)
test ={"AgApplyTableE*!":[{"Index":1,"StringVal":"Error: Enabled virtual server 3 has no IP address.U+0085Error: Apply not done. Use 'diff' to see pending changes,U+0085 then use configuration menus to correct errors.U+0085"}]};
console.log(test["AgApplyTableE*!"][0]["StringVal"]);
<强> Demo 强>