XStreamユーザーガイド:JSON

XStreamユーザーガイド:JSON

1. 概要

これは、XStreamに関するシリーズの3番目の記事です。 converting Java objects to XMLおよびvice versaでの基本的な使用法について知りたい場合は、以前の記事を参照してください。

XStreamは、XML処理機能を超えて、JavaオブジェクトとJSONを相互に変換できます。 このチュートリアルでは、これらの機能について学びます。

2. 前提条件

このチュートリアルを読む前に、ライブラリの基本を説明しているリンク:/ xstream-serialize-object-to-xml,を参照してください。

3. 依存関係


    com.thoughtworks.xstream
    xstream
    1.4.5

4. JSONドライバー

前回の記事では、XStreamインスタンスをセットアップし、XMLドライバーを選択する方法を学びました。 同様に、オブジェクトをJSONとの間で変換するために使用できるドライバーは、JsonHierarchicalStreamDriverJettisonMappedXmlDriverの2つです。

4.1. JsonHierarchicalStreamDriver

このドライバークラスは、オブジェクトをJSONにシリアル化できますが、オブジェクトに逆シリアル化することはできません。 追加の依存関係は必要なく、ドライバークラスは自己完結型です。

4.2. JettisonMappedXmlDriver

このドライバークラスは、JSONをオブジェクトに変換したり、オブジェクトから変換したりできます。 このドライバークラスを使用して、jettison.の依存関係を追加する必要があります


    org.codehaus.jettison
    jettison
    1.3.7

5. オブジェクトをJSONにシリアル化する

Customerクラスを作成しましょう:

public class Customer {

    private String firstName;
    private String lastName;
    private Date dob;
    private String age;
    private List contactDetailsList;

    // getters and setters
}

(おそらく予期せずに)ageStringとして作成したことに注意してください。 この選択については後で説明します。

5.1. JsonHierarchicalStreamDriverの使用

XStreamインスタンスを作成するためにJsonHierarchicalStreamDriverを渡します。

xstream = new XStream(new JsonHierarchicalStreamDriver());
dataJson = xstream.toXML(customer);

これにより、次のJSONが生成されます。

{
  "com.example.pojo.Customer": {
    "firstName": "John",
    "lastName": "Doe",
    "dob": "1986-02-14 16:22:18.186 UTC",
    "age": "30",
    "contactDetailsList": [
      {
        "mobile": "6673543265",
        "landline": "0124-2460311"
      },
      {
        "mobile": "4676543565",
        "landline": "0120-223312"
      }
    ]
  }
}

5.2. JettisonMappedXmlDriverの実装

JettisonMappedXmlDriverクラスを渡してインスタンスを作成します。

xstream = new XStream(new JettisonMappedXmlDriver());
dataJson = xstream.toXML(customer);

これにより、次のJSONが生成されます。

{
  "com.example.pojo.Customer": {
    "firstName": "John",
    "lastName": "Doe",
    "dob": "1986-02-14 16:25:50.745 UTC",
    "age": 30,
    "contactDetailsList": [
      {
        "com.example.pojo.ContactDetails": [
          {
            "mobile": 6673543265,
            "landline": "0124-2460311"
          },
          {
            "mobile": 4676543565,
            "landline": "0120-223312"
          }
        ]
      }
    ]
  }
}

5.3. 分析

2つのドライバーからの出力に基づいて、生成されたJSONには若干の違いがあることが明確にわかります。 たとえば、JettisonMappedXmlDriverは、データ型がjava.lang.Stringであるにもかかわらず、数値の二重引用符を省略します。__

"mobile": 4676543565,
"age": 30,

一方、JsonHierarchicalStreamDriverは二重引用符を保持します。 __

6. JSONをオブジェクトに逆シリアル化する

次のJSONを使用して、Customerオブジェクトに変換し直してみましょう。

{
  "customer": {
    "firstName": "John",
    "lastName": "Doe",
    "dob": "1986-02-14 16:41:01.987 UTC",
    "age": 30,
    "contactDetailsList": [
      {
        "com.example.pojo.ContactDetails": [
          {
            "mobile": 6673543265,
            "landline": "0124-2460311"
          },
          {
            "mobile": 4676543565,
            "landline": "0120-223312"
          }
        ]
      }
    ]
  }
}

JSONを逆シリアル化できるのはドライバーの1つ(JettisonMappedXMLDriver)のみであることを思い出してください。 この目的で_ _JsonHierarchicalStreamDriverを使用しようとすると、UnsupportedOperationExceptionになります。

Jettisonドライバーを使用して、Customerオブジェクトを逆シリアル化できます。

customer = (Customer) xstream.fromXML(dataJson);

7. 結論

この記事では、JSON処理機能XStream、オブジェクトとJSONの変換について説明しました。 また、JSON出力を調整して、短く、シンプルで、読みやすくする方法も検討しました。

XStreamのXML処理と同様に、アノテーションまたはプログラム構成のいずれかを使用してインスタンスを構成することにより、JSONのシリアル化方法をさらにカスタマイズできる他の方法があります。 詳細と例については、first article in this seriesを参照してください。

例を含む完全なソースコードは、linked GitHub repositoryからダウンロードできます。