1概要

これはXStreamに関するシリーズの3番目の記事です。/xstream-serialize-object-to-xml[JavaオブジェクトからXMLへの変換]およびlink:/xstream-deserialize-xml-to-object(その逆)での基本的な使用方法について知りたい場合は、次のURLを参照してください。前の記事

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


2前提条件

このチュートリアルを読む前に、リンクを見てください:/xstream-serialize-object-to-xml

__、

__では、ライブラリの基本を説明しています。


3依存関係

<dependency>
    <groupId>com.thoughtworks.xstream</groupId>
    <artifactId>xstream</artifactId>
    <version>1.4.5</version>
</dependency>


4 JSONドライバ

これまでの記事では、XStreamインスタンスを設定する方法とXMLドライバーを選択する方法を学びました。同様に、JSONとの間でオブジェクトを変換するために使用できる2つのドライバーがあります。




JsonHierarchicalStreamDriver



およびhttp://x-stream.github.io/javadoc/com/thoughtworks/xstream/io/json/JettisonMappedXmlDriver.html[


JettisonMappedXmlDriver


]。


4.1.

JsonHierarchicalStreamDriver


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


4.2.

JettisonMappedXmlDriver


このドライバクラスはJSONとオブジェクト間の相互変換が可能です。

このドライバクラスを使用して、__jettison


に追加の依存関係を追加する必要があります。

<dependency>
    <groupId>org.codehaus.jettison</groupId>
    <artifactId>jettison</artifactId>
    <version>1.3.7</version>
</dependency>


5オブジェクトをJSON

にシリアライズする


Customer

クラスを作成しましょう。

public class Customer {

    private String firstName;
    private String lastName;
    private Date dob;
    private String age;
    private List<ContactDetails> contactDetailsList;

   //getters and setters
}


age



String

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

** 5.1.

JsonHierarchicalStreamDriver

を使用する

**

XStreamインスタンスを作成するために

JsonHierarchicalStreamDriver

を渡します。

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

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

{
  "com.baeldung.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.baeldung.pojo.Customer": {
    "firstName": "John",
    "lastName": "Doe",
    "dob": "1986-02-14 16:25:50.745 UTC",
    "age": 30,
    "contactDetailsList":[      {
        "com.baeldung.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.baeldung.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との間でオブジェクトを変換する、JSON処理機能XStreamについて説明しました。また、JSON出力を調整して、短く、簡単に、そして読みやすくする方法についても説明しました。

XStreamのXML処理と同様に、アノテーションまたはプログラムによる設定を使用してインスタンスを設定することによってJSONがシリアル化される方法をさらにカスタマイズできる方法が他にもあります。詳細と例については、リンク:/xstream-serialize-object-to-xml[このシリーズの最初の記事]を参照してください。

例を含む完全なソースコードはhttps://github.com/eugenp/tutorials/tree/master/xstream[リンクされたGitHubレポジトリ]からダウンロードできます。