当ブログはChatGPTが自動生成しました。一部シトロンちゃんのツッコミがあります。
新人エンジニアとしてSalesforceの開発を始めた私。最初に立ちはだかった課題は、XMLとJSONのデータ変換でした。どちらもデータフォーマットの一部として非常に重要で、その違いを理解し、扱えるようになることが必要でした。
最初はXMLデータを生成することから始めました。
apexCopy code
public class XMLGenerator {
public static String generateXML() {
String xml = '';
xml += '<root>';
// 子要素1
xml += '<child1>';
xml += '<grandchild1>Value1</grandchild1>';
xml += '<grandchild2>Value2</grandchild2>';
xml += '</child1>';
// 子要素2
xml += '<child2>';
xml += '<grandchild3>Value3</grandchild3>';
xml += '<grandchild4>Value4</grandchild4>';
xml += '</child2>';
xml += '</root>';
return xml;
}
}
Salesforce Apexを使って、XMLデータの階層構造を理解し、操作することに挑戦しました。
apexCopy code
public class XMLGenerator {
public static String generateXML(List<ErrorInfo> objects) {
String xml = '';
xml += '<objects>';
for (ErrorInfo object : objects) {
xml += '<object>';
xml += '<param1>' + object.param1 + '</param1>';
xml += '<param2>' + object.param2 + '</param2>';
xml += '</object>';
}
xml += '</objects>';
return xml;
}
public class ErrorInfo {
public String param1;
public String param2;
public ErrorInfo(String param1, String param2) {
this.param1 = param1;
this.param2 = param2;
}
}
}
そして、XMLデータをJSONに変換する方法を学びました。
これは誤りですね。「XMLデータを出力する方法」と「JSONを出力する方法」を学びました。
このプロセスは単純ではありませんでしたが、JSON.serialize()メソッドが強力な味方でした。
次に、カスタムクラスを使ってXMLデータを操作する方法を学びました。
apexCopy code
public class XMLHelper {
// XMLドキュメントを生成するメソッド
public static String createXMLDocument(String rootElement) {
return '<' + rootElement + '>';
}
// 要素を追加するメソッド
public static String addElement(String xml, String elementName, String elementValue) {
return xml + '<' + elementName + '>' + elementValue + '</' + elementName + '>';
}
// 属性を設定するメソッド
public static String setAttribute(String xml, String elementName, String attributeName, String attributeValue) {
String pattern = '<' + elementName + '>';
String replacement = '<' + elementName + ' ' + attributeName + '="' + attributeValue + '">';
return xml.replace(pattern, replacement);
}
// XMLをパースして要素の値を取得するメソッド
public static String getElementValue(String xml, String elementName) {
String startTag = '<' + elementName + '>';
String endTag = '</' + elementName + '>';
Integer startIndex = xml.indexOf(startTag);
Integer endIndex = xml.indexOf(endTag);
if (startIndex >= 0 && endIndex >= 0) {
return xml.substring(startIndex + startTag.length(), endIndex);
}
return null;
}
}
カスタムクラスは、XMLデータの階層構造を再現するのに役立ち、より柔軟なデータ変換が可能になりました。そして、カスタムクラスを使って生成したデータをJSONに変換することで、目標を達成しました。
SalesforceのApexでは、様々なデータをJSONにシリアライズ(変換)することが可能です。以下に、ApexでJSONにシリアライズできる主要なデータタイプと操作を示します:
1.SObject: Salesforceの標準オブジェクトやカスタムオブジェクト(SObject)は、JSON.serialize() メソッドを使用してJSONにシリアライズできます。これにより、SObjectのフィールドとその値がJSONキーと値として変換されます。
apexCopy code
Account acc = [SELECT Id, Name FROM Account LIMIT 1];
String jsonStr = JSON.serialize(acc);
2.カスタムオブジェクト: Apexで定義されたカスタムオブジェクトもJSONにシリアライズできます。ただし、カスタムオブジェクトは適切にJSON形式にマッピングされる必要があります。
apexCopy code
CustomObject__c customObj = new CustomObject__c(Name='Example');
String jsonStr = JSON.serialize(customObj);
3.リストとマップ: Apexのリストやマップは、JSON.serialize() メソッドを使用してJSONにシリアライズできます。これにより、リスト内の要素やマップ内のキーと値がJSON配列やオブジェクトとして変換されます。
apexCopy code
List<String> stringList = new List<String>{'one', 'two', 'three'};
String jsonStr = JSON.serialize(stringList);
Map<String, Object> dataMap = new Map<String, Object>{'name' => 'John', 'age' => 30};
String jsonStr = JSON.serialize(dataMap);
4.カスタムクラス: Apexで定義したカスタムクラスも、JSONにシリアライズできます。カスタムクラスのフィールドは、JSONに含まれるキーと値にマッピングされます。ただし、カスタムクラスは @AuraEnabled または webservice アノテーションでマークする必要があります。
apexCopy code
public class CustomClass {
public String name;
public Integer age;
}
CustomClass customObj = new CustomClass();
customObj.name = 'John';
customObj.age = 30;
String jsonStr = JSON.serialize(customObj);
注意点として、JSONにシリアライズできるデータは、Apexの制限やセキュリティポリシーに従う必要があります。また、特にカスタムオブジェクトやカスタムクラスの場合、適切なマッピングとデータの整合性を確保することが重要です。
このデータ変換の冒険は、新人エンジニアとしての成長を支える重要な一歩でした。SalesforceでXMLからJSONへのデータ変換をマスターすることで、プログラミングの奥深さを味わいました。新しい技術や課題に立ち向かうことは、エンジニアとしての醍醐味であり、楽しみでもあります。
新人エンジニアとしての道のりはまだまだ続きますが、このデータ変換の冒険は私にとって大きな成功体験でした。未知の領域に挑戦し、新たなスキルを習得することは、プログラミングの魅力の一部です。これからも新たな技術に挑戦し、成長し続けたいと思います。
コメント