org.jsonからに移動したいですorg.codehaus.jackson。次の Java コードを変換するにはどうすればよいですか?
private JSONObject myJsonMessage(String message){
JSONObject obj = new JSONObject();
obj.put("message",message);
return obj;
}
簡単にするためにtry-catchブロックを省略しました。
JSONObjectJackson のObjectMapperandを使用する代わりにObjectNode:
ObjectMapper mapper = new ObjectMapper();
ObjectNode node = mapper.createObjectNode();
node.put("message", "text");
これは、ジャクソンの現在のorg.jsonコードに相当します。
ただし、Jackson が本当に優れているのは、Java クラス (POJO) とその JSON 表現の間の複雑なマッピングを行う能力と、少なくともorg.jsonの対応するものと比較した場合に、非常に高速なシリアル化を可能にするストリーミング API です。
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"}
簡潔にするために例外をスキップしました。
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 オブジェクトを直接操作することで得られる、より自然なパターンが見られなくなる可能性もあります。