0

I have JSON to which i have done JSON.stringify() to pass the JSON into apex. Now i have one key:value such that value should be passed as array but since i am doing JSON.stringify()it is converting that array as string. So what can be done to get that "name":"value" from converted JSON string and then send the value as Array.

Format i am excepting.

//Removed some values so that code should not look big.

{
  "receivableaccount": "122",
  "taxItem": "230",
  "shippingitem": "12073",
  **"customer_currency":[2,3,4,5,6,8],
   **//(This is what i want [2,3,4,5,6,8] should be passed as array instead of string)**
  "addressbook": [
    {
      "addr1": "50 Corriveau Ave.",
      "zip": "T8N 3T5",
      "city": "St. Albert,",
      "country": "CA",
      "state": "Alberta"
    }
  ]
}

Code in JS-

finalArr['recordtype'] = recordType;
finalArr['subsidiary'] = subsidary;
finalArr['custentity_customer_type'] = entityCusType;
finalArr['receivableaccount'] = receivableAcc; 
finalArr['taxItem'] = taxItem;
finalArr['shippingitem'] = shippingitem;
finalArr['customer_currency'] = customerCurrency;
finalArr['addressbook'] = addrFieldAttr;
jsonBody = JSON.stringify(finalArr);                    
component.set("v.jsonStr",jsonBody);
console.log('jsonBody of new customer '+jsonBody);

This jsonBody i am directly sending to Apex.

JSON body i am getting through above code.

{
  "companyname": "Uk test account",
  "custentity_salesforce_id": "153602",
  "subsidiary": "1",
  "terms": "Net 15",
  "recordtype": "customer",
  "custentity_customer_type": "2",
  "receivableaccount": "122",
  "taxItem": "230",
  "shippingitem": "12073",
  "customer_currency": "[2,3,4,5,6,8]",
  "addressbook": [
    {
      "addr1": "32 Princes Street",
      "zip": "EX19 2HD",
      "city": "Roborough",
      "country": "GB",
      "state": ""
    }
  ]
}
              
8
  • How did you create the JS variable customerCurrency? Without that, we have no idea why it would come in incorrectly. Also, You don't necessarily need to use JSON.stringify+JSON.deserialize, that's usually wasteful programming. – sfdcfox Sep 15 '20 at 13:01
  • i am passing customerCurrency value form custom label. And since i am sending the request using HTTP i need to stringify them.Like below- Http http = new Http(); HttpRequest request = new HttpRequest(); request.setEndPoint('callout:Netsuite_Salesforce_Integration'); //external URL request.setBody(jsonBody); request.setMethod('POST'); – Deepak Agarwal Sep 15 '20 at 13:08
  • that label is having value as [2,3,4,5,6,8]. – Deepak Agarwal Sep 15 '20 at 13:09
  • You'd want to JSON.parse the label, then, as in JSON.parse(customerCurrency). – sfdcfox Sep 15 '20 at 13:11
  • 1
    finalArr['customer_currency'] = JSON.parse(customerCurrency); -- Sorry, had to edit this comment. – sfdcfox Sep 15 '20 at 13:52
1

You need to deserialize the label so that it becomes an object. It will then be serialized correctly later.

finalArr['customer_currency'] = JSON.parse(customerCurrency);
2
  • But since i am again doing JSON,stringify() to entire finalArr won't it convert again customer_currency value into string again,thinking that only i didn't go for parse. – Deepak Agarwal Sep 15 '20 at 13:58
  • 1
    @DeepakAgarwal Parsing makes it in to a real object, so when you stringify it later, it will be a JSON array with number values. Again, you don't necessarily need to stringify, it depends on how you wrote the Apex method. – sfdcfox Sep 15 '20 at 14:07

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.