11

POJO (ソースまたはバイナリ) に基づいてサンプルの JSON フラグメントを生成する方法 (おそらく既存のフレームワークまたは類似のもの) を探しています。例えば:

public class foo {
   String var1;
   String var2;

   public String getVar1() { return var1; }
   public void setVar1(String var1) { this.var1 = var1; }

   public String getVar2() { return var2; }
   public void setVar2(String var2) { this.var2 = var2; }
}

次のような JSON サンプルが生成されます。

{
  "var1": "string1",
  "var2": "string2"
}

何か案は?もちろん、それを手作業でコーディングすることもできます。すでにそこに何かがあるかどうかを確認するだけです。

4

6 に答える 6

4

Genson http://code.google.com/p/genson/という別のライブラリもあります。

実際、Genson は Gson よりも高速で機能が多く、パフォーマンスは jackson に近い (ただし、はるかに軽量です) http://code.google.com/p/genson/wiki/Metricsを参照してください。DOM モデルの代わりにストリーミング API を使用するため、スケーラビリティが向上し、入力が到着したときに変換を処理できる Web アプリケーションに適しています。

Genson は、単純な変換からすべてのプロセスの完全なカスタマイズまで、あらゆる種類のユース ケースに適しています。多くのことを構成できます (フィールドやメソッドを使用する、コンストラクターを引数付きで注釈なしで使用する、可視性によってプロパティをフィルター処理するなど)。ウィキを見たほうがいいです。

その最新バージョン (0.91) は、maven 中央リポジトリで入手できます。

<dependency>
    <groupId>com.owlike</groupId>
    <artifactId>genson</artifactId>
    <version>0.91</version>
</dependency>

免責事項: 私はライブラリの作成者ですが、客観的になるように努めています (特にベンチマークでは)。

GsonとJacksonに関するいくつかの言葉を編集してください。Jackson を 2 年以上使用しており、Gson も少し使用しています。最初に注意すべきことは、Jackson が最速の json/java ライブラリであるということです (Gesnon はそれを打ち負かそうとしますが、非常に困難です)。Jackson には、多くの機能と構成の可能性もあります (ほとんどは注釈に基づいています)。私は Jackson を標準的かつ高度に使用していましたが、Jackson が提供していない機能が必要になるまでは快適でした。ライブラリを拡張するのは本当に難しいことがわかりました (私のユースケースでは、大きな部分を書き直さないと不可能でした)。

次に、Gsonを試しました。Gson について最初に注意すべきことは、getter/setter を使用せず、フィールドのみを使用することです。そのパフォーマンスは良くありませんでした (特にジャクソンやジェンソンと比較して)。最新バージョンでは、ストリーミング API も提供するように改善されましたが、まだ十分な速度ではありません。当初、その主な利点は Java ジェネリックの優れたサポートでしたが、Jackson と Genson もそれを提供しています。また、Gson には、Genson や Jackson よりもすぐに使用できる機能が少ないことに注意してください。また、Gson で必要な機能を実装しようとしましたが、Beans のデータバインディング部分が拡張可能ではないことがわかりました (拡張ポイントのない単一のクラスのほぼすべて)。それは論外であり、それがGensonを作成することになった方法です。

Genson を使用したくない場合は、Gson よりも Jackson をお勧めします。

于 2012-08-24T10:11:12.133 に答える
3

Gsonも参照してください(フィールドを直接読み書きするため、ゲッター/セッターは必要ありません)。

Foo foo = ...
Gson gson = new Gson();
String json = gson.toJson(foo);

JSON (または XML、または回避できる場合は構造化されたデータ形式) を手動でコーディングしないでください。それは不必要に車輪の再発明です。誰かが以前にそれを行い、エスケープ、ネスト、およびあらゆる種類の境界ケースをすでに解決しています。

于 2012-08-23T22:54:00.100 に答える
2

ここを参照してください: http://jackson.codehaus.org/

クイックスタート ガイド: http://wiki.fasterxml.com/JacksonInFiveMinutes

于 2012-08-23T22:46:39.673 に答える
1

GSON の使用:

Foo foo = new Foo();
foo.setVar1("string1");
foo.setVar2("string2");

Gson gson = new Gson();      
String json = gson.toJson(foo);
于 2012-08-23T22:54:35.617 に答える
1

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

EclipseLink JAXB (MOXy)を使用して、オブジェクト モデルを JSON (および/または XML) に変換できます。以下は完全な例です。

jaxb.properties

MOXy を JAXB プロバイダーとして指定するにはjaxb.properties、次のエントリを使用して、ドメイン モデルと同じパッケージで呼び出されるファイルを含める必要があります ( http://blog.bdoughan.com/2011/05/specifying-eclipselink-moxy-asを参照)。 -your.html )。

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

デモ

以下のデモ コードを使用して、 のインスタンスから JSON 出力を生成できますfoo。標準の JAXB API のみが使用されていることに注意してください。JAXB API は、Java SE 6 以降、JDK/RE に含まれています。

package forum12101023;

import javax.xml.bind.*;

public class Demo {

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

        foo foo = new foo();
        foo.setVar1("string1");
        foo.setVar2("string2");

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

}

出力

{
   "var1" : "string1",
   "var2" : "string2"
}

詳細については

于 2012-08-24T10:54:14.430 に答える
-1

Gsonを使用してそれを行うことができます。

Gson gson = new Gson();   
String fooJSON= gson.toJson(foo);  

詳細な説明については、このリンクを確認してください。また、JS/Extjs でそれを行う方法と、JSON から POJO への逆シリアル化についても確認してください。

于 2013-06-10T16:46:33.320 に答える