【问题标题】:Java - read in in a json file, parse it and write to DBJava - 读入一个 json 文件,解析它并写入数据库
【发布时间】:2020-02-22 06:57:49
【问题描述】:

在一个 java WebServlet 中,我正在读取一个文件:

[
{"firstName":"Chelsea","surname":"Ganter","dob":"29/03/2005","scoutNumber":"181812","joiningDate":"01/09/2016"},
{"firstName":"Oliver","surname":"Greenhatch","dob":"10/09/2007","scoutNumber":"268981","joiningDate":"17/07/2019"}
]

与:

    String[] myJsonData = request.getParameterValues("memberList");

我试图找出如何读取要写入数据库的对象,但我无法让它工作(例如,How to parse a JSON and turn its values into an Array?)。

当我添加时:

    try {
        JSONObject myjson = new JSONObject(myJsonData.toString());
        JSONArray the_json_array = myjson.getJSONArray("profiles");

        int size = the_json_array.length();
        ArrayList<JSONObject> arrays = new ArrayList<JSONObject>();
        for (int i = 0; i < size; i++) {
            JSONObject another_json_object = the_json_array.getJSONObject(i);
            System.out.println(another_json_object);
                //Blah blah blah...
                arrays.add(another_json_object);
        }
    } catch (JSONException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }

我在应用程序打开之前收到 404 错误。

【问题讨论】:

  • 读入是什么意思??你的意思是从文件中读取,JSON数据也来自请求参数吗?你也得到异常堆栈跟踪吗?
  • 为了阅读,我使用 "String[] inputJson = request.getParameterValues("memberList");" “memberList”通过 javascript 中的 ajax 调用传递给 WebServlet。异常堆栈跟踪是“22-Feb-2020 14:05:22.084 SEVERE [http-nio-8080-exec-5] org.apache.catalina.core.StandardWrapperValve.invoke Servlet.service() for servlet [client.BulkUploadMembersView ] 在路径 [/AwardTracker_NJE] 的上下文中抛出异常 java.lang.NullPointerException"

标签: java json servlets


【解决方案1】:

根据我的理解,如果您希望通过将值保存到某个实体类中来将值保存到数据库中,您可以直接将 JSON 数据加载到该类中,我创建了一个名为 profile 的示例类完全相同的字段可以使用 @JsonPoperty
进行更改。在示例代码中,日期字符串将自动转换为日期,因此隐藏了实现并使事情变得更容易。
下面是示例代码:-

import java.util.Arrays;
import java.util.Date;

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

public class SOTest {

    public static void main(String[] args) {
        try {
            String inputJson = "[\r\n" + 
                    "{\"firstName\":\"Chelsea\",\"surname\":\"Ganter\",\"dob\":\"29/03/2005\",\"scoutNumber\":\"181812\",\"joiningDate\":\"01/09/2016\"},\r\n" + 
                    "{\"firstName\":\"Oliver\",\"surname\":\"Greenhatch\",\"dob\":\"10/09/2007\",\"scoutNumber\":\"268981\",\"joiningDate\":\"17/07/2019\"}\r\n" + 
                    "]";
            com.fasterxml.jackson.databind.ObjectMapper mapper  = new ObjectMapper();

            Profile[] profiles = mapper.readValue(inputJson, Profile[].class);
            System.out.println(Arrays.asList(profiles));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

class Profile{
    private String firstName;

    private String surname;

    @JsonFormat(pattern="dd/MM/yyyy")
    private Date dob;

    private int scoutNumber;

    @JsonFormat(pattern="dd/MM/yyyy")
    private Date joiningDate;

    public String getFirstName() {
        return firstName;
    }
    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }
    public String getSurname() {
        return surname;
    }
    public void setSurname(String surname) {
        this.surname = surname;
    }
    public Date getDob() {
        return dob;
    }
    public void setDob(Date dob) {
        this.dob = dob;
    }
    public int getScoutNumber() {
        return scoutNumber;
    }
    public void setScoutNumber(int scoutNumber) {
        this.scoutNumber = scoutNumber;
    }
    @Override
    public String toString() {
        return "Profile [firstName=" + firstName + ", surname=" + surname + ", dob=" + dob + ", scoutNumber="
                + scoutNumber + ", joiningDate=" + joiningDate + "]";
    }

}

输出(仅打印 ArrayList 元素):-

Profile [firstName=Chelsea, surname=Ganter, dob=Tue Mar 29 05:30:00 IST 2005, scoutNumber=181812, joiningDate=Thu Sep 01 05:30:00 IST 2016], 

Profile [firstName=Oliver, surname=Greenhatch, dob=Mon Sep 10 05:30:00 IST 2007, scoutNumber=268981, joiningDate=Wed Jul 17 05:30:00 IST 2019]

【讨论】:

  • 写入数据库为:MySQLConnection.addYMLeader(groupID, accountID, surnameAdd, firstNameAdd, dob, image, numberAdd, startDate, endDate, sectionDetails, "0", null, "");跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-12
  • 2016-05-14
  • 2015-05-14
  • 1970-01-01
  • 2022-01-12
相关资源
最近更新 更多