1

I have my JSON here:

{
"orders": [
    {
        "orderNumber": "ORDER_900123",
        "orderDate": "2014-08-28T17:10:10Z",
        "orderType": "OR",
        "customerId": "19827",
        "poNumber": "PO_12345",
        "deliveries": [
            {
                "deliveryNumber": "D1.2",
                "shipDate": "2014-10-10T12:10:00Z",
                "devices": [
                    {
                        "deviceId": "1111",
                        "assetTag": "A123456"
                    },
                    {
                        "deviceId": "2222",
                        "assetTag": "A123456"
                    }
                ]
            },
            {
                "deliveryNumber": "D2.2",
                "shipDate": "2019-10-10T12:10:00Z",
                "devices": [
                    {
                        "deviceId": "3333",
                        "assetTag": "A123456"
                    },
                    {
                        "deviceId": "4444",
                        "assetTag": "A123456"
                    }
                ]
            }
        ]
    }
],
"statusCode": "COMPLETE",
"respondedOn": "2014-10-17T07:22:53Z"
}

I am trying to create a table for this JSON using $.each loop. Situation is that "deliveries" and "devices" number of array will always be changing except for "orders" which is only will be 1 array.

Here's what I have so far, since "orders" array will always be 1 I'll just put their key and value in var and echo them out later:

$.getJSON("sodresponse.json", function(data){
    var statusCode = data.statusCode;
    var respondedOn = data.respondedOn;
    var orderNumber = data.orders[0].orderNumber;
    var orderDate = data.orders[0].orderDate;
    var orderType = data.orders[0].orderType;
    var customerId = data.orders[0].customerId;
    var deliveries = '';
    var devices = '';

    $.each(data.orders[0].deliveries, function(key, value){
        deliveries += '<tr>';
        deliveries += '<th>Delivery No:</th>';
        deliveries += '<td>'+value.deliveryNumber+'</td>';
        deliveries += '</tr>';
        deliveries += '<tr>';
        deliveries += '<th>Ship Date:</th>';
        deliveries += '<td>'+value.shipDate+'</td>';
        deliveries += '</tr>';
        deliveries += '<tr>';
        deliveries += '<th>Device ID:</th>';
        deliveries += '<td>'+value.devices.deviceId+'</td>';
        deliveries += '</tr>';
        deliveries += '<tr>';
        deliveries += '<th>Asset Tag:</th>';
        deliveries += '<td>'+value.devices.assetTag+'</td>';
        deliveries += '</tr>';
    });

    $.each(data.orders[0].deliveries.devices, function(key, value){
        devices += '<tr>';
        devices += '<th>Device ID</th>';
        devices += '<td>'+value.deviceId+'</td>';
        devices += '</tr>';
        devices += '<tr>';
        devices += '<th>Asset Tag</th>';
        devices += '<td>'+value.assetTag+'</td>';
        devices += '</tr>';
    });
});
$('#sodtable').append(deliveries);

My desired output is like this:

Delivery No: D1.2
    Ship Date: 2014-10-10T12:10:00Z
        Device ID: 1111
        Asset Tag: A123456
        Device ID: 2222
        Asset Tag: A123456
Delivery No: D.2
    Ship Date: 2019-10-10T12:10:00Z
        Device ID: 3333
        Asset Tag: A123456
        Device ID: 4444
        Asset Tag: A123456

1 Answer 1

3

Try following code, You need to add devices loop inside current loop of deliveries

$.getJSON("sodresponse.json", function(data){
    var statusCode = data.statusCode;
    var respondedOn = data.respondedOn;
    var orderNumber = data.orders[0].orderNumber;
    var orderDate = data.orders[0].orderDate;
    var orderType = data.orders[0].orderType;
    var customerId = data.orders[0].customerId;
    var deliveries = '';
    var devices = '';  
    $.each(data.orders[0].deliveries, function(key, value){
        deliveries += '<tr>';
        deliveries += '<th>Delivery No:</th>';
        deliveries += '<td>'+value.deliveryNumber+'</td>';
        deliveries += '</tr>';
        deliveries += '<tr>';
        deliveries += '<th>Ship Date:</th>';
        deliveries += '<td>'+value.shipDate+'</td>';
        deliveries += '</tr>';


        $.each(value.devices, function(key1, value1){
          console.log(value1.deviceId);
        deliveries += '<tr>';
        deliveries += '<th>Device ID</th>';
        deliveries += '<td>'+value1.deviceId+'</td>';
        deliveries += '</tr>';
        deliveries += '<tr>';
        deliveries += '<th>Asset Tag</th>';
        deliveries += '<td>'+value1.assetTag+'</td>';
        deliveries += '</tr>';

    });
         deliveries += '<tr><td colspan="2"></td></tr>';
    });


    $('#sodtable').append(deliveries);
});

DEMO

Sign up to request clarification or add additional context in comments.

2 Comments

I did try adding devices loop inside deliveries loop but I was using $.each(data.orders[0].deliveries.devices, function(key, value){ No wonder it wont work since it'll be reading from data all over again. Thanks a lot for your help!
Glad to help @KuSyafiq

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.