6

私はJsonに非常に慣れておらず、JavaBeanから以下のJson出力を作成するという目標を持っています。Javaオブジェクトをどのように構成する必要がありますか?MyResultクラスとUserおよびResultをサブクラスとして持つ必要がありますか?これにはどのJsonライブラリを使用できますか?

“MyResult” {
    “AccountID”: “12345”,
    "User" {
        "Name": "blah blah",
        "Email": “blah@blah.com”,
     },
     "Result" {
         "Course": “blah”,
         "Score": “10.0”
     }
 }
4

6 に答える 6

9

注: 私はEclipseLink JAXB (MOXy)のリーダーであり、JAXB (JSR-222)エキスパート グループのメンバーです。


Java オブジェクトをどのように構築すればよいですか?

以下は、オブジェクト モデルがどのように見えるかです。MOXy の JSON バインディングは、ドメイン モデルを JSON にマッピングするために JAXB アノテーションを利用するので、それらも含めました。JAXB 実装には、フィールド/プロパティ名をマッピングするためのデフォルトのルールがありますが、ドキュメントがデフォルトと異なるため、各フィールドに注釈を付ける必要がありました。

私の結果

package forum11001458;

import javax.xml.bind.annotation.*;

@XmlRootElement(name="MyResult")
public class MyResult {

    @XmlElement(name="AccountID")
    private String accountID;

    @XmlElement(name="User")
    private User user;

    @XmlElement(name="Result")
    private Result result;

}

ユーザー

package forum11001458;

import javax.xml.bind.annotation.XmlElement;

public class User {

    @XmlElement(name="Name")
    private String name;

    @XmlElement(name="Email")
    private String email;

}

結果

package forum11001458;

import javax.xml.bind.annotation.XmlElement;

public class Result {

    @XmlElement(name="Course")
    private String course;

    @XmlElement(name="Score")
    private String score;

}

これにはどの Json ライブラリを使用できますか?

以下は、MOXy を使用して JSON バインディングを行う方法です。

jaxb.properties

MOXy を JAXB プロバイダーとして使用するにはjaxb.properties、次のエントリで呼び出されるファイルをドメイン モデルと同じパッケージに含める必要があります。

javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory

デモ

MOXy の JSON バインディングがコンパイル時の依存関係を必要としないことに注意してください。必要な API はすべて Java SE 6 で使用できます。Java SE 5 を使用している場合は、必要なサポート API を追加できます。

package forum11001458;

import java.io.File;
import javax.xml.bind.*;

public class Demo {

    public static void main(String[] args) throws Exception {
        JAXBContext jc = JAXBContext.newInstance(MyResult.class);

        Unmarshaller unmarshaller = jc.createUnmarshaller();
        unmarshaller.setProperty("eclipselink.media-type", "application/json");
        File json = new File("src/forum11001458/input.json");
        Object myResult = unmarshaller.unmarshal(json);

        Marshaller marshaller = jc.createMarshaller();
        marshaller.setProperty("eclipselink.media-type", "application/json");
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
        marshaller.marshal(myResult, System.out);
    }

}

input.json/出力

{
   "MyResult" : {
      "AccountID" : "12345",
      "User" : {
         "Name" : "blah blah",
         "Email" : "blah@blah.com"
      },
      "Result" : {
         "Course" : "blah",
         "Score" : "10.0"
      }
   }
}
于 2012-06-14T20:56:01.663 に答える
7

GoogleのGSONは本当に素晴らしいjsonライブラリです。これは前のリンクからのものであり、基本的にその機能の一部を概説しています。

于 2012-06-12T17:13:26.760 に答える
5

ジャクソンもかなり速くて使いやすいです

于 2012-06-12T17:16:01.533 に答える
1

閉じられていますが、この SO 投稿は、Jackson と GSON の違いを理解するのに役立ちます。どちらが「最適」かは、あなたにとって何が重要かによって異なります。

編集:特にジャクソンの場合、あなたの例は、フルデータバインディングと呼ばれるものに与えられた例によく似ています。ここで読むことができます。ところで、そのドキュメントを読むのに必要な 5 分という発表は少し短いかもしれませんが、Jackson を使用できるさまざまな方法の完全な概要を示しています。また、与えられた例では注釈が使用されていないことにも気付くでしょう。

于 2012-06-12T17:18:37.927 に答える