Formatting native objects in JSON
Representing a native data container in JSON is a straightforward task, guided by the following rules:
- Scalar properties and their values are represented as JSON name-value pairs
- Structural elements and sub-objects are represented as JSON objects
- Collections are represented as JSON arrays
Expressing a simple data object in JSON
Let us consider a simplified SalesOrderLine object of the following structure and values:
- productName -> “iPad”
- productID -> 437
- lineNumber -> 1
- orderedQuantity -> 2
- unitPrice -> 399.95
We note that the object contains scalar properties that translate easily into JSON name-value pairs. Thus, the JSON representation would be:
{
"productName" : "iPad",
"productID" : "437",
"lineNumber" : 1,
"orderedQuantity" : 2,
"unitPrice" : 399.95
}
Expressing a data object with embedded structures in JSON
Let us alter the example above by grouping the product-related properties in an own structure:
- product
- name -> “iPad”
- ID -> “437”
- lineNumber -> 1
- orderedQuantity -> 2
- unitPrice -> 399.95
In this case, the product structure would be represented as a JSON object in its own right. Thus, the JSON representation is:
{
"product" : {
"productName" : "iPad",
"productID" : "437"
},
"lineNumber" : 1,
"orderedQuantity" : 2,
"unitPrice" : 399.95
}
Expressing an object with an embedded collection
A usual example of an object containing a collection of data elements is the SalesOrder. It contains a collection of line items for the individual positions in the order itself. A simplified SalesOrder structure is:
- orderDate
- shipDate
- contact
- firstName -> “John”
- lastName -> “Doe”
- email -> “john.doe@acme.com”
- orderLines - containing
- lineNumber -> 1
- orderedQuantity -> 2
- unitPrice -> 399.95
- product
- name -> “iPad”
- ID -> 437
and - lineNumber -> 2
- orderedQuantity -> 1
- unitPrice -> 323.00
- product
- name -> “Samsung Galaxy S2”
- ID -> 932
- subtotal -> 1021.95
In the translation we observe the following:
- orderDate, shipDate and subtotal are scalar properties that should be represented as JSON name-value pairs
- contact is a structural element, and therefore to be represented as a JSON object. The contact properties firstName, lastName and email are scalar properties expressed as name-value JSON pairs
- orderLines is a collection, and should be represented as a JSON array. The array elements, the individual line items are structural elements translating into JSON objects.
- product is a structural element, mapping to a JSON object
- All remaining properties are scalar, hence representable as name-value JSON pairs.
The resulting JSON representation is:
{
"orderDate" : "2001-07-01" ,
"shippedDate" : null,
"contact" : {
"firstName" : "John",
"lastName" : "Doe",
"email" : "john.doe@acme.com"
}, // end contact
"orderLines" :
[ {
"lineNumber" : 1,
"orderedQuantity" : 2,
"unitPrice" : 399.95,
"product" : {
"name" : "iPad",
"ID" : "437"
} //end product
}, {
"lineNumber" : 2,
"orderedQuantity" : 1,
"unitPrice" : 323.00,
"product" : {
"name" : "Samsung Galaxy S2",
"ID" : "932"
} //end product
}
], // end orderLines
"subtotal" : 1021.95
}