我的应用程序数据文件夹中有一个JSON文件。
{
"user": [
{
"identifier": "1",
"name": "xyz",
"contact": [
{
"contact": "123"
},
{
"contact": "456"
}
]
}
]
}
现在,我想像这样在运行时添加一个新用户。
{
"user": [
{
"identifier": "1",
"name": "xyz",
"contact": [
{
"contact": "123"
},
{
"contact": "456"
}
]
}
],
"user": [
{
"identifier": "2",
"name": "abc",
"contact": [
{
"contact": "445"
},
{
"contact": "789"
}
]
}
]
}
为此,我有这段代码,但是它只是覆盖了现有用户。
String lastObject = getStringFronFile(new FileInputStream(file));
try {
JSONObject prevJSONObj = new JSONObject(lastObject);
prevJSONObj.put("sticker_packs",newUserArray);
writeJsonFile(file,prevJSONObj);
}
catch (Exception e) {
Log.d("Json Error", e.toString());
}
writeJsonFile
是一种写入文件的方法。
任何帮助将不胜感激。
答案 0 :(得分:2)
您上面定义的结构是错误的,您不能在JSONObject中定义两个具有相同名称user
的节点。
如果要将用户列表存储到文件中,可以将其存储为:
[
{
"name":"Jack",
"age" :20
},
{
"name":"Tom",
"age" :20
}
]
顺便说一句,为什么不使用SQLite数据库?
答案 1 :(得分:0)
Gson简化了这项工作。添加gson依赖项https://github.com/google/gson或改造的gson(两者相同)
implementation 'com.squareup.retrofit2:converter-gson:2.4.0'
。根据您的详细信息,构建了以下pojo类:
public class Example {
@SerializedName("user")
@Expose
private List<User> user = null;
public List<User> getUser() {
return user;
}
public void setUser(List<User> user) {
this.user = user;
}
}
public class User {
@SerializedName("identifier")
@Expose
private String identifier;
@SerializedName("name")
@Expose
private String name;
@SerializedName("contact")
@Expose
private List<Contact> contact = null;
public String getIdentifier() {
return identifier;
}
public void setIdentifier(String identifier) {
this.identifier = identifier;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<Contact> getContact() {
return contact;
}
public void setContact(List<Contact> contact) {
this.contact = contact;
}
}
public class Contact {
@SerializedName("contact")
@Expose
private String contact;
public String getContact() {
return contact;
}
public void setContact(String contact) {
this.contact = contact;
}
}
您可以使用以下代码段从字符串中获取详细信息,并附加动态数据并更新文件。
String lastObject = getStringFromFile(new FileInputStream(file));
Example newJsonToReplace = new Example();
List<User> usersList = new ArrayList();
try{
Type typeOfObject = new TypeToken<Example>() {
}.getType(); // type you will be getting from string
Example example = new Gson().fromJson(lastObject, typeOfObject); // converting string to pojo using gson
if(example != null){
usersList.addAll(example.getUser());
}
usersList.add(yourYourToAdd); // add your user object
newJsonToReplace.setUser(usersList);
String updatedList = new Gson().toJson(newJsonToReplace, typeOfObject); // again converting to json to string
writeJsonFile(updatedList); // will replace the existing content
}catch(Exception exception){
Log.d("Json Error", e.toString());
}