簡體   English   中英

GSON將Java對象從arraylist添加到現有的json文件?

[英]GSON adding java objects from arraylist to existing json file?

我有一個程序,當前可以從JSON文件讀取並將其實現到對象中,並存儲在對象的arraylist中。 昨天我問了一個有關如何寫回JSON文件的問題,有人建議使用.put方法,但這不能以JSON格式正確寫入。 例如,當[ { "waterSpace": 4.0, "airSpace": 5.0, "landSpace": 3.0, "name": "robbie", "penType": "pen" } ]文件中存在如下所示的JSON對象時: [ { "waterSpace": 4.0, "airSpace": 5.0, "landSpace": 3.0, "name": "robbie", "penType": "pen" } ]但是當我使用.put添加它時,會執行以下[ { "waterSpace": 4.0, "airSpace": 5.0, "landSpace": 3.0, "name": "robbie", "penType": "pen" } ]{"waterSpace": 4.0, "airSpace": 5.0, "landSpace": 3.0, "name": "robbie", "penType": "pen" }

如何使用GSON從陣列列表中正確添加對象,以便格式正確,如下所示: [ { "waterSpace": 4.0, "airSpace": 5.0, "landSpace": 3.0, "name": "robbie", "penType": "pen" },{ "waterSpace": 4.0, "airSpace": 5.0, "landSpace": 3.0, "name": "robbie", "penType": "pen" } ]

GSON也有一個序列化器,因此您只需使用fromJson方法將您的對象再次轉換為JSON。

import java.util.ArrayList;
import java.util.List;

import org.json.JSONArray;

import com.google.common.reflect.TypeToken;
import com.google.gson.Gson;

public class Deserializer {

    public static void main(String[] args) {
       Gson gson = new Gson();
       List<YourObject> yourObjectList = new ArrayList<>();
       YourObject object1 = new YourObject(10.2, 3.7, 8.5, "test", "test");
       YourObject object2 = new YourObject(5.7, 4.9, 3.1, "test2", "test2");
       yourObjectList.add(object1);
       yourObjectList.add(object2);
       JSONArray jsonArray = new JSONArray(
            gson.toJson(yourObjectList, new TypeToken<List<YourObject>>() {}.getType()));
       System.out.println(jsonArray);
   }

    public static class YourObject {

       private double waterSpace;
       private double airSpace;
       private double landscape;
       private String name;
       private String penType;

       public YourObject(double waterSpace, double airSpace, double landscape, String name, String penType) {
           this.waterSpace = waterSpace;
           this.airSpace = airSpace;
           this.landscape = landscape;
           this.name = name;
           this.penType = penType;
      }

      @Override
      public String toString() {
        return String.valueOf(this.waterSpace) + " " + String.valueOf(this.airSpace) + " "
                + String.valueOf(this.landscape) + " " + this.name + " " + this.penType;
      }
   }
}

這是一個在spring boot項目中實現的示例,但是您可以在一個簡單的Java應用程序或其他應用程序中完成它:

@SpringBootApplication
public class AlfredValidator1Application  implements CommandLineRunner{

public static void main(String[] args) {
    SpringApplication.run(AlfredValidator1Application.class, args);
}

@Override
public void run(String... args) throws Exception {

    test t1=new test(4.0, 5.0, 3.0, "robbie", "pen");
    test t2=new test(4.0, 5.0, 3.0, "robbie", "pen");
    List<test> listTest=new ArrayList<>();
    listTest.add(t1);
    listTest.add(t2);
    System.out.println(new ObjectMapper().writeValueAsString(listTest));// you can use Gson instead
}
}

class test{
private double waterSpace;
private double airSpace;
private double landSpace;
private String name;
private String penType;

public test(){

}

public test(double waterSpace, double airSpace, double landSpace, String name, String penType) {
    super();
    this.waterSpace = waterSpace;
    this.airSpace = airSpace;
    this.landSpace = landSpace;
    this.name = name;
    this.penType = penType;
}

public double getWaterSpace() {
    return waterSpace;
}

public void setWaterSpace(double waterSpace) {
    this.waterSpace = waterSpace;
}

public double getAirSpace() {
    return airSpace;
}

public void setAirSpace(double airSpace) {
    this.airSpace = airSpace;
}

public double getLandSpace() {
    return landSpace;
}

public void setLandSpace(double landSpace) {
    this.landSpace = landSpace;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getPenType() {
    return penType;
}

public void setPenType(String penType) {
    this.penType = penType;
}

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM