5

I am new to Jquery, Ajax and JSON. I am facing issue with the parsing of Json data. I have been through many questions on stackoverflow

Parsing JSON objects for HTML table

Access / process (nested) objects, arrays or JSON

Parse JSON in JavaScript?

How could I parse through this JSON object in JQuery?

and many more...

Still I am not able to parse the Json data.

My Jquery Looks like :

$.ajax({
  /* type : "POST", */
  url : "launchapptest",
  /* contentType: "application/json; charset=utf-8", */
  data : "processDateInput="+processDate,
  dataType : "json",
  async: true,
  success : function(result) {
    var od = JSON.stringify(result) ;
    var obj = JSON.parse(od);

    console.log(obj.od);
    console.log(obj.od.percentageCompleted);

    console.log(od);
    $.each(JSON.parse(od), function(idx, obj) {
      console.log(obj.tagName);
    });         
  }
});

I have tried all the combinations to parse this data, but the js console print as "undefined"

I am able to print the json object as :

{
  "od": [
    {
      "dateProcessed": [
        "09/11/2014",
        "10/11/2014",
        "11/11/2014",
        "12/11/2014"
      ],
      "percentageCompleted": 25,
      "processRunning": 0,
      "remainingTime": 0,
      "successBatchCount": 0,
      "totalBatchCount": 0
    }
  ],
  "processDateInput": "12/11/2014"
}

Please help me how can I fetch dateProcessed array and percentage complete.

Community
  • 1
  • 1
Tushar
  • 1,450
  • 6
  • 18
  • 30
  • when I am trying for each loop, the lop is running twice even though there is only onw record... please help – Tushar Nov 12 '14 at 11:28

4 Answers4

6

Try this code.

$.ajax({
    /* type : "POST", */
    url: "launchapptest",
    /* contentType: "application/json; charset=utf-8", */
    data: "processDateInput=" + processDate,
    dataType: "json",
    async: true,
    success: function (result) {
        var od = JSON.stringify(result);
        var obj = JSON.parse(od);

        $.each(obj, function (index, value) {
            console.log(obj[index][0].percentageCompleted);
            console.log(obj[index][0].processRunning);
            console.log(obj[index][0].remainingTime);
            console.log(obj[index][0].successBatchCount);
            console.log(obj[index][0].totalBatchCount);
            console.log(obj.processDateInput);
            $.each(obj[index][0].dateProcessed, function (ind, val) {
                console.log(val);
            })
        });

    }
});
zamir
  • 2,144
  • 1
  • 11
  • 23
vanarajcs
  • 968
  • 2
  • 7
  • 18
  • Console Output.... 25 Dashboard.jsp:127 0 Dashboard.jsp:128 0 Dashboard.jsp:129 0 Dashboard.jsp:130 0 Dashboard.jsp:131 12/11/2014 Dashboard.jsp:132 09/11/2014 Dashboard.jsp:134 10/11/2014 Dashboard.jsp:134 11/11/2014 Dashboard.jsp:134 12/11/2014 Dashboard.jsp:134 null Dashboard.jsp:134 null Dashboard.jsp:134 null Dashboard.jsp:134 null Dashboard.jsp:134 null Dashboard.jsp:134 undefined Dashboard.jsp:127 undefined Dashboard.jsp:128 undefined Dashboard.jsp:129 undefined Dashboard.jsp:130 undefined Dashboard.jsp:130 – Tushar Nov 12 '14 at 11:27
3

When you specify the dataType as JSON, jQuery will automatically parse it for you. Parsing it again as you are (multiple times, even) will cause issues. Try this:

success: function(result) {
    console.log(result.od);
    console.log(result.od[0].percentageCompleted);
}

I'm not entirely sure what your $.each loop is trying to do as there is no tagName property in your object.

Rory McCrossan
  • 331,213
  • 40
  • 305
  • 339
0

What is the is the return data of your AJAX call

is like this then

{
    "od": [
        {
            "dateProcessed": [
                "09/11/2014",
                "09/12/2014"
            ],
            "percentageCompleted": 25,
            "processRunning": 0,
            "successBatchCount": 0,
            "totalBatchCount": 0
        }
    ],
    "processDateInput": "12/11/2014"
}

you can parse it like this

var json = JSON.parse(result);
            var od = json['od'];
            var processDateInput = json['processDateInput'];

            $.each(od, function(index, value){
                console.log(value, index);
            });

hope it would work on you.

Oli Soproni B.
  • 2,774
  • 3
  • 22
  • 47
0

no need of parsing it because you have already mentioned it as json you can simply do like this:

                 success: function(result) {
    console.log(result.od);
    console.log(result.od[0].percentageCompleted);
console.log(od);
    $.each(result, function(idx, obj) {
     console.log(obj[0].dateProcessed);
    });         
}
Suchit kumar
  • 11,809
  • 3
  • 22
  • 44