Gson将新对象数组附加到现有JSON文件

时间:2017-11-04 14:17:50

标签: java json gson

我需要一些帮助,将新数组附加到现有文件中。我有一个像这样的JSON文件:

[
  {
    "name": "any",
    "address": {
      "street": "xxxx",
      "number": 1
    },
    "email": "teste@gmail.com"
  }
]

我想插入新数组,所以我的文件将是这样的:

[
      {
        "name": "any",
        "address": {
          "street": "xxxx",
          "number": 1
        },
        "email": "test@gmail.com"
      },
      {
        "name": "any2",
        "address": {
          "street": "yyyyy",
          "number": 2
        },
        "email": "test2@gmail.com"
      }
]

这是我的代码:

Gson gson = new GsonBuilder().setPrettyPrinting().create();    
ArrayList<Person> ps = new ArrayList<Person>();

//  .... reading entries...

ps.add(new Person(name, address, email));
String JsonPerson = gson.toJson(ps);

File f = new File("jsonfile");
if (f.exists() && !f.isDirectory()) { 
    JsonReader jsonfile = new JsonReader(new FileReader("jsonfile"));
    JsonParser parser = new JsonParser();
    JsonElement element = parser.parse(jsonfile);
    //here goes the new entry?

    try (FileWriter file = new FileWriter("pessoas.json")) {
        file.write(JsonPessoa);
        file.close();
    } catch (Exception e) {
        e.printStackTrace();
    }

那么,最好的方法是什么? 提前谢谢。

1 个答案:

答案 0 :(得分:1)

当与Pojos结合使用时,Gson真的很闪耀,所以我的建议是使用映射的pojos。考虑以下两个类。

public class Contact {

    @SerializedName("address")
    private Address mAddress;
    @SerializedName("email")
    private String mEmail;
    @SerializedName("name")
    private String mName;

    // getters and setters...

}

public class Address {

    @SerializedName("number")
    private Long mNumber;
    @SerializedName("street")
    private String mStreet;

    // getters and setters...

}

阅读JSON并添加新联系人并将其转换回JSON,它也可以无缝地用于其他方式。同样,您可以使用此方法来解决许多用例。在

之后,通过从文件中读取或使用类似的方式传递json数组字符串
Gson gson = new Gson();

List<Contact> contacts = gson.fromJson("JSON STRING", new TypeToken<List<Contact>>() {}.getType());

Contact newContact = new Contact();
// set properties
contacts.add(newContact);

String json = gson.toJson(contacts);

有像this one这样的工具可以从JSON创建pojos。