0

I found contact data as JSON on the web that is not organized as the Contact sObject as the phone number is being stored as hierarchical data: please see https://api.androidhive.info/contacts/ for the structure.

contacts:   
0:  
id: "c200"
name:   "Ravi Tamada"
email:  "[email protected]"
address:    "xx-xx-xxxx,x - street, x - country"
gender: "male"
phone:  
mobile: "+91 0000000000"
home:   "00 000000"
office: "00 000000"

This is the callout for the data:

public static HttpResponse makeCallout() {
    Http http = new Http();
    HttpRequest request = new HttpRequest();
    request.setEndpoint('https://api.androidhive.info/contacts/');
    request.setMethod('GET');
    HttpResponse response = http.send(request);

    // If the request is successful, parse the JSON response.
    if (response.getStatusCode() == 200) {
        // Deserializes the JSON string into collections of primitive data types.
        Map<String, Object> results = (Map<String, Object>) JSON.deserializeUntyped(response.getBody());
        // Cast the values in the 'contacts' key as a list
        List<Object> contacts = (List<Object>) results.get('contacts');
        System.debug('Received the following contacts:');
        for (Object contact: contacts) {
            System.debug(contact);
        }
    }
    return response;
}

In the for loop I now can define the object Contact and assign values from the object. For the hierarchical data, would I write the following code:

Contact cont = new Contact();
cont.phone = contact.phone.home; ?

Thank you for your advice!

1 Answer 1

1

Create a List<Contact> and you can populate the equivalent fields one-by-one with the for loop.

You could see the phone structure and setup the Contact record like this:

List<Contact> sfContacts = new List<Contact>();
for (Object contact: contacts) {
    Contact newCont = new Contact();
    newCont.MobilePhone = contact.get('phone').get('mobile');
    // etc...
    sfContacts.add(newCont);
}

insert sfContacts;
8
  • Ok, thank you very much, that is the answer I needed! Commented Apr 30, 2019 at 10:00
  • Hi I get an error "Method does not exist or incorrect signature: void get(String) from the type Object"! Commented Apr 30, 2019 at 10:10
  • I just read that accessing properties in objects is not possible in Apex. Read salesforce.stackexchange.com/questions/135891/…. So there must be a different solution to the problem of accessing hierarchical data? Commented Apr 30, 2019 at 11:30
  • Try another JSON.deserializeUntyped() on the contact.get('phone'). The whole structure you linked is all JSON, so you should be able to deserialize all the way down Commented Apr 30, 2019 at 11:34
  • I think you can also just type case it to Map<String, Object>, like: newContact.MobilePhone = ((Map<String, Object>)contact.get('phone')).get('mobile'); Commented Apr 30, 2019 at 12:33

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .