I am trying to deserialize a json string and get the fieldtypes but get an error on the valueType. I am trying to simulate a Json request from postman to send a Post with a list of accounts.
I dont know if my JSON is correct from postman see:
- Is my JSON correct?
- Why does this result in an NullPointerException?
Apex
Map<String, Object> fieldMap = (Map<String, Object>)JSON.deserializeUntyped(requestString);
system.debug('[UploadDocuments]fieldMap: ' + fieldMap);
SObjectType sobjType = ((SObject)(Type.forName('Schema.' + 'Account').newInstance())).getSObjectType();
SObject newSobject = sobjType.newSObject();
Map<String, Schema.sObjectField> targetFields = sobjType.getDescribe().fields.getMap();
for (String key : fieldMap.keySet())
{
Object value = fieldMap.get(key);
Schema.DisplayType valueType = targetFields.get(key).getDescribe().getType();
if (value instanceof String && valueType != Schema.DisplayType.String)
{
String svalue = (String)value;
if (valueType == Schema.DisplayType.Date)
newSobject.put(key, Date.valueOf(svalue));
else if(valueType == Schema.DisplayType.DateTime)
newSobject.put(key, DateTime.valueOfGmt(svalue));
else if (valueType == Schema.DisplayType.Percent || valueType == Schema.DisplayType.Currency)
newSobject.put(key, svalue == '' ? null : Decimal.valueOf(svalue));
else if (valueType == Schema.DisplayType.Double)
newSobject.put(key, svalue == '' ? null : Double.valueOf(svalue));
else if (valueType == Schema.DisplayType.Integer)
newSobject.put(key, Integer.valueOf(svalue));
else if (valueType == Schema.DisplayType.Base64)
newSobject.put(key, Blob.valueOf(svalue));
else
newSobject.put(key, svalue);
}
else
newSobject.put(key, value);
}
insert newSobject;
system.debug('newSobject: ' + newSobject);
Debug of fieldmap: {Accts=({name=Alice, title=title1}, {name=Ben, title=title2})}
This issue is related to: How to dynamically get name of object JSON String
Thanks in advance.