11

org.jsonからに移動したいですorg.codehaus.jackson。次の Java コードを変換するにはどうすればよいですか?

private JSONObject myJsonMessage(String message){
    JSONObject obj = new JSONObject();
    obj.put("message",message);
    return obj;
}

簡単にするためにtry-catchブロックを省略しました。

4

3 に答える 3

20

JSONObjectJackson のObjectMapperandを使用する代わりにObjectNode:

ObjectMapper mapper = new ObjectMapper();
ObjectNode node = mapper.createObjectNode();
node.put("message", "text");

これは、ジャクソンの現在のorg.jsonコードに相当します。

ただし、Jackson が本当に優れているのは、Java クラス (POJO) とその JSON 表現の間の複雑なマッピングを行う能力と、少なくともorg.jsonの対応するものと比較した場合に、非常に高速なシリアル化を可能にするストリーミング API です。

于 2012-09-21T23:59:56.277 に答える
5

JSONObjectJackson APIにはありません。を返すのではなく、JSONObjectgetter と setter を持つメッセージ プロパティを持つ Map または Java Bean を返すことができます。

public class MyMessage {
    private String message;

    public void setMessage(final String message) {
        this.message = message;
    }

    public String getMessage() {
        return this.message;
    }
}

したがって、メソッドは次のように削減されます。

private MyMessage(String message) {
    MyMessage myMessage = new MyMessage();
    myMessage.setMessage(message);
    return myMessage;
}

この変更のもう 1 つの側面は、シリアライゼーション コードを変更して、MyMessage を json 文字列に戻すことです。JSONObjectジャクソンはJava Beansを行い、デフォルトでマップします。たとえば、作成する必要はありません。

private String serializeMessage(MyMessage message){

    //Note: you probably want to put it in a global converter and share the object mapper
    ObjectMapper mapper = new ObjectMapper();
    return mapper.writeValueAsString(message);
}

上記が返ってきます{message: "some message"}

簡潔にするために例外をスキップしました。

于 2012-09-22T00:13:05.877 に答える
2

org.jsonライブラリからJackson少しずつアップグレードし、最初は同じ API を保持する場合は、「 org.json から Jackson へのアップグレード」を参照してください。これにより、基本的な JSON の読み取りと書き込みのコードが少なくとも約 3 倍速くなります。さらに、必要に応じて変換処理を開始することもできます。Jackson を使用すると、ツリーと POJO の間 ( 、 POJO 間など) を簡単に変換できるからObjectMapper.treeToValue(...)です。valueToTreeconvertValue

使い慣れたツールは、思考を特定のパターンに偏らせる可能性があることを覚えておいてください。心を開いておくことで、さらに優れたツールを見つけることができます。Jackson (または GSON またはその他の成熟した Java JSON ツール) の場合、(org.json が提供する) JSON 中心のツリー モデルを使用する代わりに、適切なデータ バインディングが役立つ場所を検討する必要があります。ツリー モデルは、思考を JSON 構造に基づいたものに保ちます。これは便利な場合があります。しかし、予想される JSON を反映するように POJO 構造を定義し、Java オブジェクトを直接操作することで得られる、より自然なパターンが見られなくなる可能性もあります。

于 2012-09-22T17:31:42.523 に答える