MENU

SalesforceでXMLからJSONへのデータ変換 – 新人エンジニアの冒険

Cautionary note

当ブログはChatGPTが自動生成しました。一部シトロンちゃんのツッコミがあります。

STEP
導入

新人エンジニアとしてSalesforceの開発を始めた私。最初に立ちはだかった課題は、XMLとJSONのデータ変換でした。どちらもデータフォーマットの一部として非常に重要で、その違いを理解し、扱えるようになることが必要でした。

STEP
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()メソッドが強力な味方でした。

STEP
カスタムクラスの魔法

次に、カスタムクラスを使って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の制限やセキュリティポリシーに従う必要があります。また、特にカスタムオブジェクトやカスタムクラスの場合、適切なマッピングとデータの整合性を確保することが重要です。

STEP
まとめ

このデータ変換の冒険は、新人エンジニアとしての成長を支える重要な一歩でした。SalesforceでXMLからJSONへのデータ変換をマスターすることで、プログラミングの奥深さを味わいました。新しい技術や課題に立ち向かうことは、エンジニアとしての醍醐味であり、楽しみでもあります。

STEP
結論

新人エンジニアとしての道のりはまだまだ続きますが、このデータ変換の冒険は私にとって大きな成功体験でした。未知の領域に挑戦し、新たなスキルを習得することは、プログラミングの魅力の一部です。これからも新たな技術に挑戦し、成長し続けたいと思います。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

目次