由于SQLite不满足要求,因此我正在一个项目中使用jsonfile作为其数据库。当使用单词库中的某个对象时,项目中会有一部分会更改状态(例如1-4)。我利用JSONArray来访问数据。当我尝试更改/编辑状态时,它不会保存或写回jsonfile。取而代之的是,它仅在应用程序的瞬时使用上起作用。
通过搜索,很多东西都使用gson弹出了。我总结使用gson。
我是gson的新手,前几天才开始学习它。而且我有麻烦。
这是我的jsonfile的结构。它有2个对象(用户和单词库)排列了
{
"users" :
[{
"username": "free",
"password": "free",
"email": "free@gmail.com",
"type": "1"
},
{
"username": "premium",
"password": "premium",
"email": "premium@gmail.com",
"type": "2"
}],
"wordbank" :
[{
"English": "able",
"Cebuano": "kaya",
"Pronunciation": "ká-ya",
"POS": "adjective",
"Audio": "kaya.mp3",
"Status": "0"
},
{
"English": "advice",
"Cebuano": "tambag",
"Pronunciation": "tam-bag",
"POS": "noun",
"Audio": "tambag.mp3",
"Status": "0"
}]
}
根据我在教程视频中看到的内容,您可以为其模型创建一个不同的java类。所以我创建了3个Java类。用户,单词库和字典(将它们结合在一起)。
public class dictionary{
users[] user;
wordbanks[] word;
}
我已经在使用现有的jsonfile,所以我解析了它并得到了它的jsonstring。之后,我尝试使用
反序列化jsonstring = readFromFile();//returns string from jsonfile
dictionary list = new Gson().fromJson(jsonstring, dictionary.class);
运行并调试。但是当我得到结果时。它为空。
问题: 1.我可以使用gson编辑并保存json文件中的更改吗? 2.我的结构是否适合应修课程? 3.如何序列化和反序列化?
答案 0 :(得分:0)
用户类别
public class User {
@SerializedName("username")
private String userName;
@SerializedName("password")
private String password;
@SerializedName("email")
private String email;
@SerializedName("type")
private String type;
// Add Getters and Setters
}
WordBank类
public class Wordbank {
@SerializedName("English")
private String english;
@SerializedName("Cebuano")
private String cebuano;
@SerializedName("Pronunciation")
private String pronunciation;
@SerializedName("POS")
private String pos;
@SerializedName("Audio")
private String audio;
@SerializedName("Status")
private String status;
// Add getters and Setters
}
词典类
public class Dictonary {
@SerializedName("users")
User[] userArray;
@SerializedName("wordbank")
Wordbank[] wordbankArray;
public User[] getUserArray() {
return userArray;
}
public void setUserArray(User[] userArray) {
this.userArray = userArray;
}
public Wordbank[] getWordbankArray() {
return wordbankArray;
}
public void setWordbankArray(Wordbank[] wordbankArray) {
this.wordbankArray = wordbankArray;
}
}
如上所述进行必要的更改后,我可以对字符串进行反序列化
Dictonary dictonary = new Gson().fromJson(input,Dictonary.class);
答案 1 :(得分:0)
是的,您可以使用Gson
满足所有要求。首先为您的json结构创建匹配的Pojo。您可以使用this pojo generator之类的工具。只需将json粘贴到那里(不要选择json模式)并生成即可。假设您有三个类Result
(包含列表,类似于字典类),User
和Wordbank
类。您可以按以下方式读取(反序列化)和写入(序列化)回文件。
try {
// deserialize
Result result = gson.fromJson(new FileReader(new File("src/test/resources/sample.json")), Result.class);
// ... update result as required
// result.users.remove(0);
// serialize
String json = gson.toJson(result);
Files.write(new File("src/test/resources/sample.json").toPath(), json.getBytes());
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}