Json2Json Transformation Performance Comparison
Note: Second values are for comparison.
Using Jolt
Performance: 1 sec (Best)
Sample Input
{
"uId" : null,
"data" : [
{
"id" : 2,
"version" : 22,
"code" : "2121001",
"currency" : {
"code" : "TL",
},
"detail" : "XXX",
"group" : {
"id" : 321,
"name" : "YYY",
"otherName" : "YYY"
},
"code" : null,
"type" : {
"id" : 3,
"name" : "ZZZ",
"otherName" : "ZZZ"
},
"name" : "YYY / AAA: xxx",
"prodUnit" : {
"id" : 5,
"otherName" : "BBB"
},
"category" : "CCC",
"codeName" : "2121001 YYY",
"Unit" : "BBB"
}
],
"total" : 13540
}
CODE
JOLT Transformation Code
[
{
"operation": "shift",
"spec": {
"data": {
"*": {
"id": "data[#2].mat_id",
"code": "data[#2].mat_code",
"currency": {
"code": "data[#3].mat_currency"
},
"detail": "data[#2].detail",
"group": {
"id": "data[#3].matGroup_id",
"name": "data[#3].matGroup_name"
},
"code": "data[#2].mat_code",
"type": {
"id": "data[#3].matType_id",
"name": "data[#3].matType_name"
},
"prodUnit": {
"otherName": "data[#3].prodUnit_otherName"
},
"ategory": "data[#2].mat_category",
"codeName": "data[#2].mat_codeName",
"unit": "data[#2].mat_unit",
"contactInfo": {
"email": "data[#3].source"
}
}
}
}
},
{
"operation": "default",
"spec": {
"data[]": {
"*": {
"mat_id": null,
"mat_code": null,
"mat_currency": null,
"detail": null,
"matGroup_id": null,
"matGroup_name": null,
"matNsnCode": null,
"matType_id": null,
"matType_name": null,
"prodUnit_otherName": null,
"mat_category": null,
"mat_codeName": null,
"matUnit": null,
"source": "SEM"
}
}
}
}
]
CODE
Sample Output:
{
"data" : [ {
"mat_id" : 3,
"mat_code" : "2121001",
"mat_currency" : "TL",
"detail" : "XXX",
"matGroup_id" : 321,
"matGroup_name" : " YYY",
"matNsnCode" : null,
"matType_id" : 2,
"matType_name" : "ZZZ",
"prodUnit_otherName" : "BBB",
"matCategory" : "CCC",
"mat_codeName" : "YYY / AAA: xx",
"matUnit" : "BBB",
"source" : "SEM"
}
]
}
CODE
UsingGroovy JsonPlurp
Performance: 10sec
import tr.com.soagen.apinizer.util.*;
import groovy.json.JsonSlurper;
String templateJson = "{"+
"\"mat_id\":\"#mat_id\", "+
...
"}";
def jsonSlurper = new JsonSlurper()
def parsedJson = jsonSlurper.parseText(responseBodyTextFromTargetAPI);
parsedJson.data.each { object ->
String valueJson = templateJson;
valueJson = valueJson.replace("#mat_id" , ""+object.id );
...
GROOVY
Using JsonTemplate strings and for loop with JsonPath
Performance: 20sec
import tr.com.soagen.apinizer.util.*;
int itemCount = 0;
try{
itemCount= UtilJsonOperations.extractFromJsonBody(null, responseBodyTextFromTargetAPI, '$'+".data.length()").toInteger();
}catch(Exception e){
...
}
String templateJson = "{"+
"\"mat_id\":\"#mat_id\", "+
...
"}";
for(int i=0; i < itemCount; i++){
String valueJson = templateJson;
String jsonPath ='$'+".data["+i+"].id";
String value = UtilJsonOperations.extractFromJsonBody(null, responseBodyTextFromTargetAPI, jsonPath)
valueJson = valueJson.replace("#mat_id" , value );
...
GROOVY
Using JsonTemplate string and for loop with Json Path and partial json
Performance: 40 sec (worst)
import tr.com.soagen.apinizer.util.*;
int itemCount = 0;
try{
itemCount= UtilJsonOperations.extractFromJsonBody(null, responseBodyTextFromTargetAPI, '$'+".data.length()").toInteger();
}catch(Exception e){
...
}
String templateJson = "{"+
"\"mat_id\":\"#mat_id\", "+
...
"}";
for(int i=0; i < itemCount; i++){
String valueJson = templateJson;
String partialValue = UtilJsonOperations.extractFromJsonBody(null, responseBodyTextFromTargetAPI, '$'+".data["+i+"]")
String jsonPath ='$'+".id";
String value = UtilJsonOperations.extractFromJsonBody(null, partialValue, jsonPath)
valueJson = valueJson.replace("#mat_id" , value );
...
GROOVY