Implementation of JSON Patch Query as proposed by the TM Forum
npm install json-patch-queryThis library aims to implement the specification outlined by the TM Forum outlined here
path property that adheres to the JSON Path Format.Returns the mutated document.
src/test/unit.test.ts file in this repository, where there a wide variety of examples executing the different operations.orderItem objects that have productOffering.id equal to 1513:json
{
"id": "3774",
"description": "This product order covers ...",
"requestedCompletionDate": "2017-07-14",
"orderItem": [{
"action": "add",
"quantity": 1,
"productOffering": {
"href": "/productOffering/1513",
"id": "1513",
"name": "Offer Good Plan"
},
"product": {
"relatedParty": [{
"id": "7894",
"name": "Mary",
"role": "customer"
}]
}
}, {
"action": "add",
"quantity": 2,
"productOffering": {
"href": "/productOffering/1513",
"id": "1513",
"name": "Offer Good Plan"
},
"product": {
"relatedParty": [{
"id": "3456",
"name": "John",
"role": "customer"
}]
}
}]
}
`You may update the
relatedParty of a specific orderItem with a JSON path as follows:
`
// Update the name where the relatedParty.id of the product is 7894
$.orderItem[?(@.productOffering.id=="1513")].product.relatedParty[?(@.id=="7894")].name
`However, if you wanted to update the quantity of the same
orderItem, a JSON path with a query would not be possible, instead you would need to provide the index upfront.
`
// ❌ JSON Path does not support nested queries, quantity cannot be updated this way
$.orderItem[?(@.productOffering.id=="1513" && @.product.relatedParty[?(@.id=="7894")])].quantity// ✅ Update the quantity of the orderItem where the relatedParty.id of the product is 7894 (with a fixed index)
$.orderItem[?(@.productOffering.id=="1513" && @.product.relatedParty[0].id=="7894")].quantity
``That is, unlike XPath, JSON Path does not have operations for accessing parent or sibling nodes from the given node.