Jacksonを使用したJavaオブジェクトのJSONへの変換


166

JSONを次のようにしたい:

{
    "information": [{
        "timestamp": "xxxx",
        "feature": "xxxx",
        "ean": 1234,
        "data": "xxxx"
    }, {
        "timestamp": "yyy",
        "feature": "yyy",
        "ean": 12345,
        "data": "yyy"
    }]
}

これまでのコード:

import java.util.List;

public class ValueData {

    private List<ValueItems> information;

    public ValueData(){

    }

    public List<ValueItems> getInformation() {
        return information;
    }

    public void setInformation(List<ValueItems> information) {
        this.information = information;
    }

    @Override
    public String toString() {
        return String.format("{information:%s}", information);
    }

}

そして

public class ValueItems {

    private String timestamp;
    private String feature;
    private int ean;
    private String data;


    public ValueItems(){

    }

    public ValueItems(String timestamp, String feature, int ean, String data){
        this.timestamp = timestamp;
        this.feature = feature;
        this.ean = ean;
        this.data = data;
    }

    public String getTimestamp() {
        return timestamp;
    }

    public void setTimestamp(String timestamp) {
        this.timestamp = timestamp;
    }

    public String getFeature() {
        return feature;
    }

    public void setFeature(String feature) {
        this.feature = feature;
    }

    public int getEan() {
        return ean;
    }

    public void setEan(int ean) {
        this.ean = ean;
    }

    public String getData() {
        return data;
    }

    public void setData(String data) {
        this.data = data;
    }

    @Override
    public String toString() {
        return String.format("{timestamp:%s,feature:%s,ean:%s,data:%s}", timestamp, feature, ean, data);
    }
}

ジャクソンを使ってJavaオブジェクトをJSONに変換する方法が欠けているだけです。

public static void main(String[] args) {
   // CONVERT THE JAVA OBJECT TO JSON HERE
    System.out.println(json);
}

私の質問は:私のクラスは正しいですか?どのインスタンスを呼び出す必要がありますか、またどのようにしてこのJSON出力を実現できますか?


4
次のチュートリアルが役立つかもしれません:mkyong.com/java/how-to-convert-java-object-to-from-json-jackson
maple_shaft

ありがとうございました:)
JustTheAverageGirl 2013

エンティティが他のテーブルに参加した場合は、この方法に従ってください。https:
//stackoverflow.com/questions/19928151/convert-entity-object-to-json/45695714#45695714

回答:


417

objectJacksonでJSONに変換するには:

ObjectWriter ow = new ObjectMapper().writer().withDefaultPrettyPrinter();
String json = ow.writeValueAsString(object);

9
唯一のことは、StringがObjectWriterからエスケープされて出てくることです。使用:RESTfulのようなWebサービスを介して送信される場合は、新しいJSONObject(ow.writeValueAsString(msg))。
jmarcosSF 2015年

興味がないのに、なぜos.writeValueAsJSONString(object)でないのですか?
DevilCode

3
このエラーに直面しています、コードで解決する方法com.liveprocessor.LPClient.LPTransactionクラスのシリアライザーが見つかりません。BeanSerializerを作成するためのプロパティが見つかりません(例外を回避するには、SerializationFeature.FAIL_ON_EMPTY_BEANSを無効にします)

11
ちなみにライブラリ:import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectWriter;
diego

objectJSONに含めたいすべてのフィールドのゲッターが必要です。
Drakonoved 2017

25

私はこれが古い(そして私はJavaに慣れていない)ことを知っていますが、同じ問題に遭遇しました。答えは初心者ほど明確ではなかったので...学んだことを追加したいと思いました。

私は努力を助けるためにサードパーティのライブラリを使用しました:org.codehaus.jackson これのためのすべてのダウンロードはここで見つけることができます

基本的なJSON機能を使用するには、プロジェクトのライブラリに次のjarを追加する必要があります 。jackson-mapper-asl および jackson-core-asl

プロジェクトに必要なバージョンを選択します。(通常、最新の安定したビルドを使用できます)。

それらがプロジェクトのライブラリにインポートされたら、次のimport行をコードに追加します。

 import org.codehaus.jackson.JsonGenerationException;
 import org.codehaus.jackson.map.JsonMappingException;
 import org.codehaus.jackson.map.ObjectMapper;

JSONに変換し、RESTful Webサービスの一部として返すJavaオブジェクトを定義して割り当てた値

User u = new User();
u.firstName = "Sample";
u.lastName = "User";
u.email = "sampleU@example.com";

ObjectMapper mapper = new ObjectMapper();

try {
    // convert user object to json string and return it 
    return mapper.writeValueAsString(u);
}
catch (JsonGenerationException | JsonMappingException  e) {
    // catch various errors
    e.printStackTrace();
}

結果は次のようになります。 {"firstName":"Sample","lastName":"User","email":"sampleU@example.com"}


「import」の行が「import com.fasterxml.jackson.databind.ObjectMapper;」に変更されたと思います。
バリーピッカー

16

これは役に立つかもしれません:

objectMapper.writeValue(new File("c:\\employee.json"), employee);

// display to console
Object json = objectMapper.readValue(
     objectMapper.writeValueAsString(employee), Object.class);

System.out.println(objectMapper.writerWithDefaultPrettyPrinter()
     .writeValueAsString(json));

10

ただこれをして

 for jackson it's
         ObjectMapper mapper = new ObjectMapper();  
         return mapper.writeValueAsString(object);
         //will return json in string


 for gson it's:
            Gson gson = new Gson();
            return Response.ok(gson.toJson(yourClass)).build();

Response.okとは何ですか?
15年

mongoDBに挿入されたJSONサイズが許容制限を超えているという問題がありました。Gsonオブジェクトをオンにすると、Jacksonよりも大きなサイズになります。ほんのヒント。
Daniela Morais

14
問題は、jacksonではなく、Gson
Ean V '21 / 01/16

2
@Codeversed Responseは、ジャージーライブラリのクラスです。Response.okは、ステータスコード200のJSON応答を返します。
Pranav

2

まあ、受け入れられた答えでさえ opが要求したものを正確に出力する。JSON文字列を出力しますが、"文字はエスケープされています。それで、少し遅れるかもしれませんが、人々の役に立つことを願って答えます!ここに私がそれをする方法があります:

StringWriter writer = new StringWriter();
JsonGenerator jgen = new JsonFactory().createGenerator(writer);
jgen.setCodec(new ObjectMapper());
jgen.writeObject(object);
jgen.close();
System.out.println(writer.toString());


2

注:最も投票数の多いソリューションを機能させるには、POJOの属性がpublicpublic getter/である必要がありますsetter

デフォルトでは、Jackson 2はパブリックまたはパブリックゲッターメソッドを持つフィールドでのみ機能します。すべてのフィールドがプライベートまたはパッケージがプライベートであるエンティティのシリアル化は失敗します。

まだテストされていませんが、このルールはgoogle Gsonなどの他のJSONライブラリにも適用されると思います。


0
public class JSONConvector {

    public static String toJSON(Object object) throws JSONException, IllegalAccessException {
        String str = "";
        Class c = object.getClass();
        JSONObject jsonObject = new JSONObject();
        for (Field field : c.getDeclaredFields()) {
            field.setAccessible(true);
            String name = field.getName();
            String value = String.valueOf(field.get(object));
            jsonObject.put(name, value);
        }
        System.out.println(jsonObject.toString());
        return jsonObject.toString();
    }


    public static String toJSON(List list ) throws JSONException, IllegalAccessException {
        JSONArray jsonArray = new JSONArray();
        for (Object i : list) {
            String jstr = toJSON(i);
            JSONObject jsonObject = new JSONObject(jstr);
            jsonArray.put(jsonArray);
        }
        return jsonArray.toString();
    }
}

仕事が多すぎる、反射が多すぎる!マッパーは、これらのボイラープレート関連の作業から解放することになっています。
Ean V 2016

3
コンベクターが大好きです!
Christos

0

このようにGoogle Gsonを使用できます

UserEntity user = new UserEntity();
user.setUserName("UserName");
user.setUserAge(18);

Gson gson = new Gson();
String jsonStr = gson.toJson(user);
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.