I'm Having an Apex Class which I used to deserialize the JSON. I'm calling the function which passed the string and sObject name which is Contact.
This is my String which i passed in the function with object name
{
"attributes": {
"type": "Contact",
"url": "/services/data/v44.0/sobjects/Contact/0030b000026mjUsAAI"
},
"Name": "89178917",
"AccountId": "0010b00002EeEE0AAN",
"Title": "8917",
"Phone": "91+123-456-7890/0",
"Email": "aslam.bari@gmail.com",
"OwnerId": "0050b0000032MekAAE",
"Time__c": "00:45:00.000Z",
"Id": "0030b000026mjUsAAI",
"Account": {
"attributes": {
"type": "Account",
"url": "/services/data/v44.0/sobjects/Account/0010b00002EeEE0AAN"
},
"Name": "Pepsi",
"Id": "0010b00002EeEE0AAN"
},
"Owner": {
"attributes": {
"type": "User",
"url": "/services/data/v44.0/sobjects/User/0050b0000032MekAAE"
},
"Alias": "abrow",
"Id": "0050b0000032MekAAE"
}
}
Here is my code:
public static sObject ParseSobject(String jsonString,type typeOf){
Map<string,Object> newUpList = (Map<String, Object>) JSON.deserializeUntyped(jsonString);
sObject record = (sObject)typeOf.newInstance();
system.debug('newUpList'+newUpList);
list<sObject> newList = new list<sObject>();
Map<String,Schema.SObjectField> fields = record.getSObjectType().getDescribe().fields.getMap();
for(String str : newUpList.keySet()){
if(fields.containsKey(str)){
Schema.SoapType fieldType = fields.get(str).getDescribe().getSOAPType();
Schema.DescribeFieldResult fldDescribe = fields.get(str).getDescribe();
system.debug('fldDescribe'+fldDescribe);
switch on fldDescribe.getType() {
when TIME {
record.put(fldDescribe.getName(), ParseTime(newUpList.get(str)+''));
} when BOOLEAN {
record.put(fldDescribe.getName(), boolean.valueOf(newUpList.get(str)));
} when DOUBLE {
record.put(fldDescribe.getName(), double.valueOf(newUpList.get(str)));
} when DATE {
record.put(fldDescribe.getName(), Date.valueOf(newUpList.get(str)));
} when DATETIME {
record.put(fldDescribe.getName(), datetime.valueOf(newUpList.get(str)));
} when INTEGER {
record.put(fldDescribe.getName(), integer.valueOf(newUpList.get(str)));
}when STRING {
record.put(fldDescribe.getName(),String.valueOf(newUpList.get(str)));
}
}
}
}
return record;
}
public static time ParseTime(String timeString){
// 14:26:41.276Z or "14:26:41.276Z"
List<String> values = timeString.replace('Z', '').replace('"', '').split(':');
// (14, 26, 41.276)
Integer hours = Integer.valueOf(values[0]);
Integer minutes = Integer.valueOf(values[1]);
// 41.276 -> (41, 276)
Integer seconds = Integer.valueOf(values[2].split('\\.')[0]);
Integer milliseconds = Integer.valueOf(values[2].split('\\.')[1]);
return Time.newInstance(hours, minutes, seconds, milliseconds);
}
JSON.deserialize
? – Adrian Larson♦ Jan 29 at 21:29