web-dev-qa-db-ja.com

JacksonによるJavaオブジェクトのJSONへの変換

私の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);
    }
}

Jacksonを使ってJavaオブジェクトをJSONに変換する方法が足りません。

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

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

139

JSONでJacksonを使ってobjectを変換するには:

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

私はこれが古いことを知っています(そして私はJavaには初めてです)が、私は同じ問題にぶつかりました。そして答えは私にとって初心者ほど明確ではありませんでした...それで私は私が学んだことを追加すると思いました。

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

基本的なJSON機能のためには、あなたのプロジェクトのライブラリに次のjarファイルを追加する必要があります: jackson-mapper-asl and jackson-core-asl

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

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

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

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

User u = new User();
u.firstName = "Sample";
u.lastName = "User";
u.email = "[email protected]";

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":"[email protected]"}

19
f10orf12

これは便利かもしれません:

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));
16
Vicky

これだけ

 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();
7
Shell Scott

まあ、受け入れられた答えでさえも正確に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
Ean V

注:最も投票されたソリューションを機能させるには、POJO内の属性はpublicであるか、パブリックのgetter/setterである必要があります。

デフォルトでは、Jackson 2はpublicかpublicのgetterメソッドを持つフィールドでのみ動作します。すべてのフィールドがprivateまたはpackage privateのエンティティをシリアル化すると失敗します。

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

1
ZhaoGang

あなたはこのようにGoogle Gsonを使うことができます

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

Gson gson = new Gson();
String jsonStr = gson.toJson(user);
0
Ven Ren

あなたはこれをすることができます:

String json = new ObjectMapper().writeValueAsString(yourObjectHere);