GSON добавление java-объектов из массива в существующий файл json? - PullRequest
0 голосов
/ 18 мая 2018

У меня есть программа, которая в настоящее время может читать из файла JSON и реализовывать их в объекте, а также сохранять в массиве объектов.Вчера я задал вопрос о том, как выполнить обратную запись в файл JSON, и кто-то предложил метод .put, однако в формате JSON он записывается неправильно.Например, когда существует существующий объект JSON, как показано ниже в файле .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" } ]

Ответы [ 2 ]

0 голосов
/ 18 мая 2018

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;
      }
   }
}
0 голосов
/ 18 мая 2018

Это пример, реализованный в весеннем загрузочном проекте, но вы можете сделать это в простом 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;
}

}

...