Search code examples
groovy

groovy:combine jsons based on a value


is there a simple way to combine two jsons based on the value. In the MainJson , i have an element "downloads" which has multiple id's seprated by a comma. So based on the downloadsID from MainJson,values from SecondJson needs to be appended

MainJson: `

{
    "ProductMaster": [
        {
            "SEODescription": "32742, 396660",
            "SEOTitle": "PRODUCT 1 SEO TITLE",
            "accesoires": "1172658,1172659",
            "applications": "1172647,1172648,1172649",
            "contactPerson": "1172661",
            "downloads": "1172663,1172669,1172670",
            "highlights": "396658",
            "id": "1172641",
            "isNew": "1",
            "isSparePart": "1172663,1172669,1172670",
            "name": "Product 1",
            "productItems": "A4F0630502M1,A1Z1100041M1,A1G1800061M1,A4D1251181E1,105500450100",
            "relatedProducts": "1172658,1172659",
            "shortCode": "PROD1",
            "shortDescription": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.",
            "videos": "396657,396659"
        },
        {
            "SEODescription": "",
            "SEOTitle": "PRODUCT 1 SEO TITLE",
            "accesoires": "1172641",
            "applications": "1172647,1172648,1172649",
            "contactPerson": "1172661",
            "downloads": "1172663",
            "highlights": "396657",
            "id": "1172658",
            "isNew": "1",
            "isSparePart": "1172663",
            "name": "Product 2",
            "productItems": "613831,613823,613852",
            "relatedProducts": "1172641",
            "shortCode": "PROD2",
            "shortDescription": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.",
            "videos": "396659"
        }
    ]
}

`

SecondJson

`

{
    "downloads": [
        {
            "actualHeight": "1146",
            "actualWidth": "1146",
            "categories": "1172668",
            "deepLink": "HTTPS://ALIAXIS-WEBSITES.DDEV.SITE/ASSET/DEEPLINK/IMAGE_396657",
            "effectiveUrl": "HTTPS://ALIAXIS-WEBSITES.DDEV.SITE/PIM-NEW/IMAGE_2.JPG",
            "fileSize": "0",
            "fileType": "JPG",
            "id": "1172669",
            "mimeType": "IMAGE/JPEG",
            "name": "Download 2"
        },
        {
            "actualHeight": "1980",
            "actualWidth": "1980",
            "categories": "1172666",
            "deepLink": "HTTPS://ALIAXIS-WEBSITES.DDEV.SITE/ASSET/DEEPLINK/IMAGE_396658",
            "effectiveUrl": "HTTPS://ALIAXIS-WEBSITES.DDEV.SITE/PIM-NEW/IMAGE_1.JPG",
            "fileSize": "201965",
            "fileType": "JPG",
            "id": "1172663",
            "mimeType": "IMAGE/JPEG",
            "name": "Download 1"
        },
        {
            "actualHeight": "2875",
            "actualWidth": "2875",
            "categories": "1172666,1172668",
            "deepLink": "HTTPS://ALIAXIS-WEBSITES.DDEV.SITE/ASSET/DEEPLINK/IMAGE_86356",
            "effectiveUrl": "HTTPS://ALIAXIS-WEBSITES.DDEV.SITE/_DEFAULT_UPLOAD_BUCKET/0205800.JPG",
            "fileSize": "0",
            "fileType": "JPG",
            "id": "1172670",
            "mimeType": "IMAGE/JPEG",
            "name": "Download 3"
        }
    ]
}

`

Expected Result: `

{
    "ProductMaster": [
        {
            "SEODescription": "32742, 396660",
            "SEOTitle": "PRODUCT 1 SEO TITLE",
            "accesoires": "1172658,1172659",
            "applications": "1172647,1172648,1172649",
            "contactPerson": "1172661",
            "downloads": [
                {
                    "actualHeight": "1146",
                    "actualWidth": "1146",
                    "categories": "1172668",
                    "deepLink": "HTTPS://ALIAXIS-WEBSITES.DDEV.SITE/ASSET/DEEPLINK/IMAGE_396657",
                    "effectiveUrl": "HTTPS://ALIAXIS-WEBSITES.DDEV.SITE/PIM-NEW/IMAGE_2.JPG",
                    "fileSize": "0",
                    "fileType": "JPG",
                    "id": "1172669",
                    "mimeType": "IMAGE/JPEG",
                    "name": "Download 2"
                },
                {
                    "actualHeight": "1980",
                    "actualWidth": "1980",
                    "categories": "1172666",
                    "deepLink": "HTTPS://ALIAXIS-WEBSITES.DDEV.SITE/ASSET/DEEPLINK/IMAGE_396658",
                    "effectiveUrl": "HTTPS://ALIAXIS-WEBSITES.DDEV.SITE/PIM-NEW/IMAGE_1.JPG",
                    "fileSize": "201965",
                    "fileType": "JPG",
                    "id": "1172663",
                    "mimeType": "IMAGE/JPEG",
                    "name": "Download 1"
                },
                {
                    "actualHeight": "2875",
                    "actualWidth": "2875",
                    "categories": "1172666,1172668",
                    "deepLink": "HTTPS://ALIAXIS-WEBSITES.DDEV.SITE/ASSET/DEEPLINK/IMAGE_86356",
                    "effectiveUrl": "HTTPS://ALIAXIS-WEBSITES.DDEV.SITE/_DEFAULT_UPLOAD_BUCKET/0205800.JPG",
                    "fileSize": "0",
                    "fileType": "JPG",
                    "id": "1172670",
                    "mimeType": "IMAGE/JPEG",
                    "name": "Download 3"
                }
            ],
            "highlights": "396658",
            "id": "1172641",
            "isNew": "1",
            "isSparePart": "1172663,1172669,1172670",
            "name": "Product 1",
            "productItems": "A4F0630502M1,A1Z1100041M1,A1G1800061M1,A4D1251181E1,105500450100",
            "relatedProducts": "1172658,1172659",
            "shortCode": "PROD1",
            "shortDescription": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.",
            "videos": "396657,396659"
        },
        {
            "SEODescription": "",
            "SEOTitle": "PRODUCT 1 SEO TITLE",
            "accesoires": "1172641",
            "applications": "1172647,1172648,1172649",
            "contactPerson": "1172661",
            "downloads": [
                {
                    "actualHeight": "2875",
                    "actualWidth": "2875",
                    "categories": "1172666,1172668",
                    "deepLink": "HTTPS://ALIAXIS-WEBSITES.DDEV.SITE/ASSET/DEEPLINK/IMAGE_86356",
                    "effectiveUrl": "HTTPS://ALIAXIS-WEBSITES.DDEV.SITE/_DEFAULT_UPLOAD_BUCKET/0205800.JPG",
                    "fileSize": "0",
                    "fileType": "JPG",
                    "id": "1172670",
                    "mimeType": "IMAGE/JPEG",
                    "name": "Download 3"
                }
            ],
            "highlights": "396657",
            "id": "1172658",
            "isNew": "1",
            "isSparePart": "1172663",
            "name": "Product 2",
            "productItems": "613831,613823,613852",
            "relatedProducts": "1172641",
            "shortCode": "PROD2",
            "videos": "396659"
        }
    ]
}

`

is there any groovyfunction which can do the lookup and combine the Jsons


Solution

  • The code can look roughly as:

    mainJson.ProductMaster.each{ master ->
      List<String> dlIds = master.downloads.split( ',' )
      master.downloads = secondJson.downloads.findAll{ it.id in dlIds }
    }