32

Customer、などのモデル クラスがProductプロジェクトにあり、いくつかのフィールドとその setter-getter メソッドがあります。これらのクラスのオブジェクトを、Socketsを介してクライアントとサーバーとの間で JSONObject として交換する必要があります。

JSONObjectオブジェクトのフィールドがキーになり、そのモデル クラス オブジェクトの値がこの JSONObject の値になるように、モデル クラスのオブジェクトから直接作成できる方法はありますか。

例:

Customer c = new Customer();
c.setName("Foo Bar");
c.setCity("Atlantis");
.....
/* More such setters and corresponding getters when I need the values */
.....

そして、JSON オブジェクトを次のように作成します。

JSONObject jsonc = new JSONObject(c); //I'll use this only once I'm done setting all values.

これは私に次のようなものを与えます:

{"name":"Foo Bar","city":"Atlantis"...}

一部のモデル クラスでは、特定のプロパティ自体が他のモデル クラスのオブジェクトであることに注意してください。そのような:

Product p = new Product();
p.setName("FooBar Cookies");
p.setProductType("Food");
c.setBoughtProduct(p);

上記のような場合、予想どおり、生成される JSON オブジェクトは次のようになります。

{"name":"Foo Bar","city":"Atlantis","bought":{"productname":"FooBar Cookies","producttype":"food"}}

各モデルクラスで次のようなものを作成し、JSON に適した文字列を作成して操作できることはわかっtoJSONString()ていますが、Java で RESTful サービスを作成した以前の経験 (これはこの質問の文脈から完全に外れています) では、返すことができました。サービスメソッドからJSON文字列を利用し@Produces(MediaType.APPLICATION_JSON)、モデルクラスのオブジェクトを返すメソッドを持っています。そのため、クライアント エンドで使用できる JSON 文字列が生成されました。

現在のシナリオで同様の動作が可能かどうか疑問に思っていました。

4

5 に答える 5

39

Google GSONがこれを行います。いくつかのプロジェクトで使用しましたが、シンプルでうまく機能します。介入なしで単純なオブジェクトの翻訳を行うことができますが、翻訳をカスタマイズするためのメカニズムも (双方向で) あります。

Gson g = ...;
String jsonString = g.toJson(new Customer());
于 2012-06-07T11:20:45.947 に答える
21

そのためにGsonを使用できます:

Maven の依存関係:

<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.8.0</version>
</dependency>

Java コード:

Customer customer = new Customer();
Product product = new Product();

// Set your values ...

Gson gson = new Gson();
String json = gson.toJson(customer);

Customer deserialized = gson.fromJson(json, Customer.class);
于 2012-06-07T11:20:35.703 に答える
2

これを実現するには、 gsonを使用します。次のコードを使用して、jsonを取得できます。

Gson gson = new Gson();
String json = gson.toJson(yourObject);
于 2012-06-07T11:22:08.560 に答える
0

XStream Parser を使用して

    Product p = new Product();
    p.setName("FooBar Cookies");
    p.setProductType("Food");
    c.setBoughtProduct(p);

    XStream xstream = new XStream(new JettisonMappedXmlDriver());
    xstream.setMode(XStream.NO_REFERENCES);
    xstream.alias("p", Product.class);
    String jSONMsg=xstream.toXML(product);
    System.out.println(xstream.toXML(product));

これにより、JSON 文字列配列が得られます。

于 2012-06-07T11:50:42.220 に答える