Свойство "AdvisoryModel" не имеет значения, указанного в JSON. Кроме того, это не свойство объектов в массиве. Это свойство самого внешнего объекта.
Пожалуйста, попробуйте код ниже, и дайте мне знать, если вы видите ожидаемые результаты:
public class FromJSON_V1 {
public static string input ='{"AdvisoryModel": "test","AdvisoryModelName": "","AnalysisDate": "2017-09-01","AssetClassDistrib": [{"Code": "5917","Name": "Equities - Emerging Markets","Value": 278.79749999999956,"Weight": 0.284105297215223}]}';
public static void parse(){
Map<String,Object> jsonParsed =(Map<String,Object> ) JSON.deserializeUntyped(input);
System.debug(jsonParsed);
List<Object> entriesArray =( List<Object> ) jsonParsed.get('AssetClassDistrib');
System.debug('AdvisoryModel before loop =' + jsonParsed.get('AdvisoryModel'));
for(Object inidividualEntries : entriesArray){
Map<String,Object> ind = (Map<String,Object> )inidividualEntries;
System.debug('AdvisoryModel = ' + jsonParsed.get('AdvisoryModel'));
System.debug('Name = '+ ind.get('Name'));
System.debug('Weight = '+ ind.get('Weight'));
System.debug('Value = '+ ind.get('Value'));
}
}
}
С такими сложными объектами, это может быть легче десериализовать в тип Apex вместо нетипизированной карты. Если вы не уверены, каким будет ответ в будущем, тогда карта - это хорошее решение. Если вы предполагаете, что всегда будет массив объектов с этими свойствами, это также может быть конкретный объект.
Если вы придерживаетесь карты, я бы предложил некоторую проверку типов, чтобы избежать запуска. ошибки времени, если свойство AssetClassDistrib по какой-либо причине не содержит массив.
Object assetClassDistrib = jsonParsed.get('AssetClassDistrib');
List<Object> entriesArray = assetClassDistrib instanceof List<Object> ?
(List<Object>)jsonParsed.get('AssetClassDistrib') :
new List<Object>();