无法解析JSON响应

时间:2015-07-07 08:15:01

标签: javascript jquery ajax json

我试图解析以下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响应?

感谢。

5 个答案:

答案 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