寻找一个简单的方法来解析JSON(Looking for a Straightforward Way

2019-10-29 21:48发布

我试图解析使用Java以下JSON:

{ "student_id": "123456789", "student_name": "Bart Simpson", "student_absences": 1}

什么是实现这一目标的最简单方法。 我试着做下面的方式,但认为必须有一个更简单的方法。

 import org.json.*
 JSONObject obj = new JSONArray("report");

 for(int i = 0; I < arr.length(); i++){
     String studentname =     
         arr.getJSONObject(i).getString("student_id");
         arr.getJSONObject(i).getString("student_name");
         arr.getJSONObject(i).getString("student_name");
 }

Answer 1:

有GSON :

import com.google.gson.Gson;
import com.google.gson.annotations.SerializedName;

public class Main {
  public static void main(String[] args) {
    String json = "{ \"student_id\": \"123456789\", \"student_name\": \"Bart Simpson\", \"student_absences\": 1}";
    Student student = new Gson().fromJson(json, Student.class);
    System.out.println(student);
  }
}

class Student {

  @SerializedName("student_id")
  String studentId;

  @SerializedName("student_name")
  String studentName;

  @SerializedName("student_absences")
  Integer studentAbsences;

  @Override
  public String toString() {
    return "Student{" +
      "studentId='" + studentId + '\'' +
      ", studentName='" + studentName + '\'' +
      ", studentAbsences=" + studentAbsences +
      '}';
  }
}

另一种流行的一个是杰克逊 :

import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.ObjectMapper;

public class Main {
  public static void main(String[] args) throws Exception {
    String json = "{ \"student_id\": \"123456789\", \"student_name\": \"Bart Simpson\", \"student_absences\": 1}";
    Student student = new ObjectMapper().readValue(json, Student.class);
    System.out.println(student);
  }
}

class Student {

  @JsonProperty("student_id")
  String studentId;

  @JsonProperty("student_name")
  String studentName;

  @JsonProperty("student_absences")
  Integer studentAbsences;

  @Override
  public String toString() {
    return "Student{" +
      "studentId='" + studentId + '\'' +
      ", studentName='" + studentName + '\'' +
      ", studentAbsences=" + studentAbsences +
      '}';
  }
}

在这两种情况下,运行Main会打印:

Student{studentId='123456789', studentName='Bart Simpson', studentAbsences=1}

编辑

而如果没有创建一个Student类,你可以给像JsonPath一试。



Answer 2:

在回答你的问题取决于你想要达到的目标。 你的榜样将导致字符串数组。 以前的答案结果在一个Java类的每个字段的属性。 另一种选择是将值成图。

如果已经写了一个编码器/解码器组合这一点。 编码是很容易的:使用地图的键和值。 解码器(JSON字符串来图或其他任何东西)需要一个解析器(最好是一个标记)。



文章来源: Looking for a Straightforward Way to Parse JSON