JSON से एपेक्स कनवर्टर

वैध JSON को नीचे चिपकाएँ और संबंधित एपेक्स तैयार हो जाएगा। यदि उत्पन्न एपेक्स आरक्षित कीवर्ड का उपयोग करता है, तो एक कस्टम पार्सर उत्पन्न किया जाएगा।

public class GeneratedApex {
    public UserProfile userProfile;

    public class UserProfile {
        public Integer userId; // 1001
        public PersonalInfo personalInfo;
        public Contact contact;
        public Address address;
        public List<SocialMediaProfiles> socialMediaProfiles;
    }

    public class PersonalInfo {
        public String firstName; // "Jane"
        public String lastName; // "Doe"
        public Integer age; // 28
    }

    public class Contact {
        public String email; // "jane.doe@example.com"
        public Phone phone;
    }

    public class Phone {
        public String home; // "555-1234"
        public String work; // "555-5678"
    }

    public class Address {
        public String street; // "123 Main St"
        public String city; // "Springfield"
        public String state; // "IL"
        public String postalCode; // "62701"
    }

    public class SocialMediaProfiles {
        public String platform; // "Twitter"
        public String username; // "janedoe"
    }

    public static GeneratedApex parse(String jsonString) {
        return (GeneratedApex) JSON.deserialize(jsonString, GeneratedApex.class);
    }
}
Photo of calculator author Wes Nolteके द्वारा बनाई गई Wes Nolte.आखरी अपडेट Nov 18, 2024. संदर्भ.

JSON से एपेक्स कन्वर्टर का उपयोग कैसे करें

अपने JSON डेटा को बाईं ओर टेक्स्ट क्षेत्र में चिपकाकर प्रारंभ करें। टूल JSON को पार्स करता है और संबंधित एपेक्स कक्षाएं उत्पन्न करता है, जो दाईं ओर टेक्स्ट क्षेत्र में प्रदर्शित होते हैं। ये कक्षाएं Salesforce की एपेक्स प्रोग्रामिंग भाषा के साथ संगत प्रारूप में किसी भी नेस्टेड ऑब्जेक्ट और सरणियों सहित JSON डेटा की संरचना का प्रतिनिधित्व करती हैं। कभी-कभी JSON पेलोड की प्रॉपर्टीज एपेक्स द्वारा आरक्षित कीवर्ड का उपयोग करती हैं। इस स्थिति में, एक कस्टम पार्सर उत्पन्न किया जाता है क्योंकि सीधे डिसेरियलाइज़ेशन संभव नहीं है। किसी भी स्थिति में, आपको केवल GeneratedApex.parse() विधि को एक वैध JSON स्ट्रिंग पास करनी होगी, ताकि संबंधित एपेक्स संरचना उत्पन्न की जा सके।

जेनरेटेड एपेक्स का उपयोग कैसे करें

एपेक्स उत्पन्न करना एक बात है, लेकिन इसका उपयोग कैसे करना है यह जानना दूसरी बात है। आइए दो उदाहरण देखें। हम सरलतम उपयोग केस से शुरू करते हैं, जहां निम्नलिखित JSON एक एपेक्स क्लास उत्पन्न करता है जिसे सीधे डिसेरियलाइज़ किया जा सकता है:

JSON

{
    "userProfile": {
        "userId": 1001,
        "personalInfo": {
            "firstName": "Jane",
            "lastName": "Doe",
            "age": 28
        },
        "contact": {
            "email": "jane.doe@example.com",
            "phone": {
                "home": "555-1234",
                "work": "555-5678"
            }
        },
        "address": {
            "street": "123 Main St",
            "city": "Springfield",
            "state": "IL",
            "postalCode": "62701"
        },
        "socialMediaProfiles": [
            {
                "platform": "Twitter",
                "username": "janedoe"
            },
            {
                "platform": "LinkedIn",
                "url": "https://www.linkedin.com/in/janedoe/"
            }
        ]
    }
}

उत्पन्न एपेक्स

public class GeneratedApex {
    public UserProfile userProfile;

    public class UserProfile {
        public Integer userId; // 1001
        public PersonalInfo personalInfo;
        public Contact contact;
        public Address address;
        public List<SocialMediaProfiles> socialMediaProfiles;
    }

    public class PersonalInfo {
        public String firstName; // "Jane"
        public String lastName; // "Doe"
        public Integer age; // 28
    }

    public class Contact {
        public String email; // "jane.doe@example.com"
        public Phone phone;
    }

    public class Phone {
        public String home; // "555-1234"
        public String work; // "555-5678"
    }

    public class Address {
        public String street; // "123 Main St"
        public String city; // "Springfield"
        public String state; // "IL"
        public String postalCode; // "62701"
    }

    public class SocialMediaProfiles {
        public String platform; // "Twitter"
        public String username; // "janedoe"
    }

    public static GeneratedApex parse(String jsonString) {
        return (GeneratedApex) JSON.deserialize(jsonString, GeneratedApex.class);
    }
}

एक बार संरचना तैयार हो जाने पर, आने वाले JSON पेलोड को डिसेरियलाइज़ करने के लिए उत्पन्न क्लास का उपयोग करना आसान हो जाता है। नीचे आपको API को कॉल करने और फिर JSON प्रतिक्रिया को डिसेरियलाइज़ करने का एक पूर्ण उदाहरण मिलेगा। डिसेरियलाइज़ेशन के लिए केवल एक पंक्ति कोड की आवश्यकता होती है।

public class ApiService {
    public static GeneratedApex fetchUserData() {
        // Create an HTTP request and response
        Http http = new Http();
        HttpRequest request = new HttpRequest();
        request.setEndpoint('https://api.example.com/userdata'); // Replace with your API endpoint
        request.setMethod('GET');
        request.setHeader('Content-Type', 'application/json');

        try {
            // Send the HTTP request and get the response
            HttpResponse response = http.send(request);

            // Check if the request was successful
            if (response.getStatusCode() == 200) {
                // Deserialize the JSON response into the GeneratedApex object
                GeneratedApex result = (GeneratedApex) JSON.deserialize(response.getBody(), GeneratedApex.class);
                return result;
            } else {
                // Handle the error scenario
                System.debug('Error: ' + response.getStatusCode() + ' - ' + response.getStatus());
                return null;
            }
        } catch (Exception e) {
            // Handle any exceptions that occur during the HTTP request
            System.debug('Exception: ' + e.getMessage());
            return null;
        }
    }
}

उपरोक्त उदाहरण सरल है और इसे किसी कस्टम पार्सर की आवश्यकता नहीं होती। हालांकि, यदि उत्पन्न एपेक्स में reserved keyword या कोई अमान्य वर्ण शामिल है, तो एक कस्टम पार्सर की आवश्यकता होती है। यह अगले भाग का विषय है।

कस्टम पार्सर के साथ JSON को डिसेरियलाइज़ करना

JSON कुंजी-मूल्य जोड़ों का एक संग्रह है जिसे नेस्ट किया जा सकता है। यदि इनमें से कोई भी कुंजी एपेक्स द्वारा आरक्षित कीवर्ड है या इसमें अमान्य वर्ण शामिल हैं, जैसे कि अंडरस्कोर से शुरू होना, तो ऊपर बताई गई विधि से उत्पन्न एपेक्स कंपाइल नहीं होगा।

हमारा कन्वर्टर ऐसे मुद्दों का पता लगाता है और स्वचालित रूप से ऐसा एपेक्स कोड उत्पन्न करता है जिसमें एक कस्टम पार्सर शामिल होता है। नीचे एक उदाहरण दिया गया है, जहां JSON कुंजियों के नाम, जो एपेक्स में समस्या पैदा कर सकते थे, को NS_ और ns नामस्पेस प्रीफिक्स के साथ संशोधित किया गया है।

JSON

{
    "user": {
        "userId": "user_456",
        "email": "user@example.com",
        "log-id": "abc123",
        "_object": "accountActivation"
    }
}

उत्पन्न एपेक्स

public class GeneratedApex {
    public NS_User nsUser;

  public class NS_User {
        public String userid;
        public String email;
        public String logid;
        public String nsObject;
  }

  public static GeneratedApex parse(String jsonString) {
      JSONParser parser = JSON.createParser(jsonString);
      if (parser.nextToken() != null) {
          return parseGeneratedApex(parser);
      } else {
          return null;
      }
  }

  private static GeneratedApex parseGeneratedApex(JSONParser parser) {
      GeneratedApex obj = new GeneratedApex();

      while (parser.nextToken() != System.JSONToken.END_OBJECT) {
          if (parser.getCurrentToken() == System.JSONToken.FIELD_NAME) {
              String fieldName = parser.getText();

              if (parser.nextToken() != System.JSONToken.VALUE_NULL) {
                if (fieldName == 'user') {
                    obj.nsUser = parseNS_User(parser);
                } else {
                    System.debug(LoggingLevel.WARN, 'Unknown field: ' + fieldName);
                    consumeObject(parser);
                }
              }
          }
      }
      return obj;
  }

  private static NS_User parseNS_User(JSONParser parser) {
      NS_User obj = new NS_User();

      while (parser.nextToken() != System.JSONToken.END_OBJECT) {
          if (parser.getCurrentToken() == System.JSONToken.FIELD_NAME) {
              String fieldName = parser.getText();

              if (parser.nextToken() != System.JSONToken.VALUE_NULL) {
                if (fieldName == 'userId') {
                    obj.userid = parser.getText();
                } else if (fieldName == 'email') {
                    obj.email = parser.getText();
                } else if (fieldName == 'log-id') {
                    obj.logid = parser.getText();
                } else if (fieldName == '_object') {
                    obj.nsObject = parser.getText();
                } else {
                    System.debug(LoggingLevel.WARN, 'Unknown field: ' + fieldName);
                    consumeObject(parser);
                }
              }
          }
      }
      return obj;
  }

  private static void consumeObject(JSONParser parser) {
      Integer depth = 0;
      
      do {
          System.JSONToken curr = parser.getCurrentToken();
          if (curr == System.JSONToken.START_OBJECT || curr == System.JSONToken.START_ARRAY) {
              depth++;
          } else if (curr == System.JSONToken.END_OBJECT || curr == System.JSONToken.END_ARRAY) {
              depth--;
          }
      } while (depth > 0 && parser.nextToken() != null);
  }
}

उत्पन्न एपेक्स लंबा हो सकता है क्योंकि JSON को एपेक्स में अनुवाद करने में अधिक काम शामिल होता है, लेकिन इसे उपरोक्त उदाहरण की तरह ही उपयोग किया जाता है।

public class ApiService {
    // Method to fetch and parse JSON from the API
    public static GeneratedApex fetchAndParseUser(String endpointUrl) {
        Http http = new Http();
        HttpRequest request = new HttpRequest();
        request.setEndpoint(endpointUrl);
        request.setMethod('GET');
        
        try {
            HttpResponse response = http.send(request);

            if (response.getStatusCode() == 200) {
                String jsonResponse = response.getBody();
                System.debug('API Response: ' + jsonResponse);

                // Deserialize JSON using GeneratedApex class
                GeneratedApex parsedData = GeneratedApex.parse(jsonResponse);
                System.debug('Parsed Data: ' + parsedData);
                return parsedData;
            } else {
                System.debug('Error: HTTP response code ' + response.getStatusCode());
                return null;
            }
        } catch (Exception e) {
            System.debug('Error in API call: ' + e.getMessage());
            return null;
        }
    }
}

संदर्भ

  1. Apex Reference Guide: JSON Class