私の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出力を達成することができますか?
JSONでJacksonを使ってobject
を変換するには:
ObjectWriter ow = new ObjectMapper().writer().withDefaultPrettyPrinter();
String json = ow.writeValueAsString(object);
私はこれが古いことを知っています(そして私は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]"}
これは便利かもしれません:
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));
これだけ
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();
まあ、受け入れられた答えでさえも正確に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());
注:最も投票されたソリューションを機能させるには、POJO内の属性はpublic
であるか、パブリックのgetter
/setter
である必要があります。
デフォルトでは、Jackson 2はpublicかpublicのgetterメソッドを持つフィールドでのみ動作します。すべてのフィールドがprivateまたはpackage privateのエンティティをシリアル化すると失敗します。
まだテストされていませんが、このルールはgoogle Gsonのような他のJSONライブラリにも適用されると思います。
あなたはこのようにGoogle Gsonを使うことができます
UserEntity user = new UserEntity();
user.setUserName("UserName");
user.setUserAge(18);
Gson gson = new Gson();
String jsonStr = gson.toJson(user);
あなたはこれをすることができます:
String json = new ObjectMapper().writeValueAsString(yourObjectHere);