使用 GSON 解析 Java 中的 JSON 文件
Parsing a JSON file in Java using GSON
我正在尝试在 java 中使用 GSON 解析此 JSON 文件,但我 运行 遇到了一些困难。
{"group": [
{
"name": "Team1 Student2",
"email": "ctc-t1-s2",
"contribution": {
"score": 16.6,
"comment": "From 'Team1 Student2' about 'Team1 Student2'\nAnd they said, \"You'll never get it done!\""
}
}
,{
"name": "Team1 Student4",
"email": "mmi-t1-s4",
"contribution": {
"score": 0.4,
"comment": "From 'Team1 Student2' about 'Team1 Student4'\nAnd they said, \"You'll never get it done!\""
}
}
,{
"name": "Team1 Student3",
"email": "pco-t1-s3",
"contribution": {
"score": 39.1,
"comment": "From 'Team1 Student2' about 'Team1 Student3'\nAnd they said, \"You'll never get it done!\""
}
}
,{
"name": "Team1 Student1",
"email": "eyr-t1-s1",
"contribution": {
"score": 23.9,
"comment": "From 'Team1 Student2' about 'Team1 Student1'\nAnd they said, \"You'll never get it done!\""
}
}],"confidential_comments": "That's all! It was \"fun\"! (said Team1 Student2)\nDon't forget: Bring your towel \ the cake is a lie."}
现在我有三个 classes 其中一个是一组 class:
public class Group {
private List<Student> group[];
public Group(List<Student> students[]){
this.group = students;
}
public void setStudents(List<Student> students[]) {
this.group = students;
}
public List<Student>[] getStudents() {
return group;
}
@Override
public String toString() {
return "Group{" +
"students=" + Arrays.toString(group) +
'}';
}
}
还有一个学生class:
public class Student {
private String name;
private String sfu_email;
public Student(String name, String email){
this.name = name;
this.sfu_email = email;
}
public String getName() {
return name;
}
public String getEmail(){
return sfu_email;
}
public void setEmail(String email) {
this.sfu_email = email;
}
public void setName(String name) {
this.name = name;
}
public String toString(){
return getName() + " " + getName();
}
}
在我的主要函数中,当我 运行 这样做时,我最终打印了一个 NULL 对象。
Gson gson = new Gson();
JsonParser jsonParser = new JsonParser();
try(Reader reader = new FileReader("FILE PATH")) {
JsonElement jsonObject = jsonParser.parse((reader));
System.out.println(jsonObject);
Group students = gson.fromJson(jsonObject, Group.class);
System.out.println(students);
Student student = gson.fromJson(jsonObject, Student.class);
System.out.println(student);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
我想知道您如何能够解析输入文件,以便将 JSON 字符串放入对象或对象列表中?很抱歉这个问题很长。
我认为问题出在您的 JSON 中 group
已经是 List<Student>
,但您正试图从 gson 中检索组对象。我认为您需要的是一个不同的对象,例如 Reader
或 Response
,如下所示:
class Response {
private Group group;
}
然后做类似的事情:
Response response = gson.fromJson(jsonObject, Response.class);
Group = response.getGroup();
请注意,要使 GSON 正常工作,类 中的字段名称需要与 JSON 相匹配。 (所以 Student
中的 sfu_email
应该按照 JSON 读作 email
。
希望对您有所帮助
Group
class 包含 List<Student>
,同样不需要在 group
变量名末尾添加 []
。
public class Group {
private List<Student> group;
public void setStudents(List<Student> students) {
this.group = students;
}
public List<Student> getStudents() {
return group;
}
@Override
public String toString() {
return "Group [group=" + group + "]";
}
}
确保 classes 中的字段名称需要匹配 JSON.
public class Student {
private String name;
private String email; //sfu_email changed to email
public Student(String name, String email) {
this.name = name;
this.email = email;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
@Override
public String toString() {
return "Student [name=" + name + ", email=" + email + "]";
}
尝试使用上述解决方案。
我正在尝试在 java 中使用 GSON 解析此 JSON 文件,但我 运行 遇到了一些困难。
{"group": [
{
"name": "Team1 Student2",
"email": "ctc-t1-s2",
"contribution": {
"score": 16.6,
"comment": "From 'Team1 Student2' about 'Team1 Student2'\nAnd they said, \"You'll never get it done!\""
}
}
,{
"name": "Team1 Student4",
"email": "mmi-t1-s4",
"contribution": {
"score": 0.4,
"comment": "From 'Team1 Student2' about 'Team1 Student4'\nAnd they said, \"You'll never get it done!\""
}
}
,{
"name": "Team1 Student3",
"email": "pco-t1-s3",
"contribution": {
"score": 39.1,
"comment": "From 'Team1 Student2' about 'Team1 Student3'\nAnd they said, \"You'll never get it done!\""
}
}
,{
"name": "Team1 Student1",
"email": "eyr-t1-s1",
"contribution": {
"score": 23.9,
"comment": "From 'Team1 Student2' about 'Team1 Student1'\nAnd they said, \"You'll never get it done!\""
}
}],"confidential_comments": "That's all! It was \"fun\"! (said Team1 Student2)\nDon't forget: Bring your towel \ the cake is a lie."}
现在我有三个 classes 其中一个是一组 class:
public class Group {
private List<Student> group[];
public Group(List<Student> students[]){
this.group = students;
}
public void setStudents(List<Student> students[]) {
this.group = students;
}
public List<Student>[] getStudents() {
return group;
}
@Override
public String toString() {
return "Group{" +
"students=" + Arrays.toString(group) +
'}';
}
}
还有一个学生class:
public class Student {
private String name;
private String sfu_email;
public Student(String name, String email){
this.name = name;
this.sfu_email = email;
}
public String getName() {
return name;
}
public String getEmail(){
return sfu_email;
}
public void setEmail(String email) {
this.sfu_email = email;
}
public void setName(String name) {
this.name = name;
}
public String toString(){
return getName() + " " + getName();
}
}
在我的主要函数中,当我 运行 这样做时,我最终打印了一个 NULL 对象。
Gson gson = new Gson();
JsonParser jsonParser = new JsonParser();
try(Reader reader = new FileReader("FILE PATH")) {
JsonElement jsonObject = jsonParser.parse((reader));
System.out.println(jsonObject);
Group students = gson.fromJson(jsonObject, Group.class);
System.out.println(students);
Student student = gson.fromJson(jsonObject, Student.class);
System.out.println(student);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
我想知道您如何能够解析输入文件,以便将 JSON 字符串放入对象或对象列表中?很抱歉这个问题很长。
我认为问题出在您的 JSON 中 group
已经是 List<Student>
,但您正试图从 gson 中检索组对象。我认为您需要的是一个不同的对象,例如 Reader
或 Response
,如下所示:
class Response {
private Group group;
}
然后做类似的事情:
Response response = gson.fromJson(jsonObject, Response.class);
Group = response.getGroup();
请注意,要使 GSON 正常工作,类 中的字段名称需要与 JSON 相匹配。 (所以 Student
中的 sfu_email
应该按照 JSON 读作 email
。
希望对您有所帮助
Group
class 包含 List<Student>
,同样不需要在 group
变量名末尾添加 []
。
public class Group {
private List<Student> group;
public void setStudents(List<Student> students) {
this.group = students;
}
public List<Student> getStudents() {
return group;
}
@Override
public String toString() {
return "Group [group=" + group + "]";
}
}
确保 classes 中的字段名称需要匹配 JSON.
public class Student {
private String name;
private String email; //sfu_email changed to email
public Student(String name, String email) {
this.name = name;
this.email = email;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
@Override
public String toString() {
return "Student [name=" + name + ", email=" + email + "]";
}
尝试使用上述解决方案。