Navneet Kaur
Navneet Kaur

Reputation: 39

Create Dynamic json in javascript

I want to create a dynamic json string. Json looks like:

{
"getHostedPaymentPageRequest": {
    "merchantAuthentication": {
        "name": "x345dsfg",
        "transactionKey": "456tyYYUU7876"
    },
    "transactionRequest": {
        "transactionType": "authCaptureTransaction",
        "amount": "20.00",
        "profile": {
            "customerProfileId": "123456789"
        }
    }
}

}

The values in json like name, transactionKey, transactionType, amount, customerProfileId will vary for different users.

I am following this method to create json:

var getHostedPaymentPageRequest = new Object();            

    var merchantAuthentication = {};
    merchantAuthentication.name = "x345dsfg";
    merchantAuthentication.transactionKey = "456tyYYUU7876";
    var transactionRequest = {};
    transactionRequest.transactionType = "";
    transactionRequest.amount = "20.00";

    var profile = {};
    profile.customerProfileId = "123456789";

    transactionRequest.profile = profile;

    getHostedPaymentPageRequest.merchantAuthentication = merchantAuthentication;
    getHostedPaymentPageRequest.transactionRequest = transactionRequest;

    getHostedPaymentPageRequest = JSON.stringify(getHostedPaymentPageRequest);

But its not giving back the right values.

How do I make a valid json in the desired format?

Upvotes: 0

Views: 107

Answers (3)

Mara Black
Mara Black

Reputation: 1751

You can use this as a reference..

I've split the object based on what it's doing and I've obtained two separate objects: merchantAuthentication and transactionRequest. For each object I created a separate function who return an individual object, because in the future you might want to add more fields therefore it will be easier to you to know were to place them :)

function createMerchantAuthObject() {
  let merchantAuth = {};
  merchantAuth.name = "x345dsfg";
  merchantAuth.transactionKey = "456tyYYUU7876"

  return merchantAuth;
}

function createTransactionRequestObject() {
  let transactionRequest = {};
  transactionRequest.transactionType = "authCaptureTransaction"
  transactionRequest.amount = "20.00"
  transactionRequest.profile = {};
  transactionRequest.profile.customerProfileId = "123456789"

  return transactionRequest;
}

function getHostedPaymentPageRequest() {
  let request = {}
  request.getHostedPaymentPageRequest = {}
  request.getHostedPaymentPageRequest.merchantAuthentication = createMerchantAuthObject();
  request.getHostedPaymentPageRequest.transactionRequest = createTransactionRequestObject();

  return request; // used in order to print the whole object
}

const myObject = getHostedPaymentPageRequest();
console.log(myObject);

Upvotes: 1

Navneet Kaur
Navneet Kaur

Reputation: 39

This solved my problem:

var money=document.getElementById("amount").value;
    var customerprofileid = "1926616706";
    var merchantAuthentication = {};
    merchantAuthentication.name = "ser555";
    merchantAuthentication.transactionKey = "fgrtyujjj";
    
    var getHostedPaymentPageRequest = {
        "getHostedPaymentPageRequest": {
            "merchantAuthentication": {
                "name": merchantAuthentication.name,
                "transactionKey": merchantAuthentication.transactionKey
            },
            "transactionRequest": {
                "transactionType": "authCaptureTransaction",
                "amount": money,
                "profile": {
                    "customerProfileId": customerprofileid
                }
            },
            "hostedPaymentSettings": {
        "setting": [        { 
            "settingName": "hostedPaymentIFrameCommunicatorUrl",
            "settingValue": "{\"url\": \"http://localhost:52965/IframeCommunicator.html\"}"
        }]
    }
        }
    };
  getHostedPaymentPageRequest = JSON.stringify(getHostedPaymentPageRequest);

Upvotes: 0

Norberth Csorba
Norberth Csorba

Reputation: 352

The provided code (if we add a console.log on getHostedPaymentPageRequest) displays the following result (which is how it should behave):

{
    "merchantAuthentication": {
        "name": "x345dsfg",
        "transactionKey": "456tyYYUU7876"
    },
    "transactionRequest": {
        "transactionType": "",
        "amount": "20.00",
        "profile": {
            "customerProfileId": "123456789"
        }
    }
}

The only meaningful difference that I see between this and the expected result is that in your expected result the JSON starts with

{
    "getHostedPaymentPageRequest": {
         ...
    }
}

For that you have to wrap your getHostedPaymentPageRequest object in another object. So instead of doing this:

getHostedPaymentPageRequest = JSON.stringify(getHostedPaymentPageRequest);

add braces like this:

getHostedPaymentPageRequest = JSON.stringify({ getHostedPaymentPageRequest });

Upvotes: 1

Related Questions