簡體   English   中英

讀寫JSON文件Java

[英]Reading and Writing JSON file Java

我正在嘗試將JSON文件讀取到數據結構中,以便可以計算一堆元素。

JSON文件的格式為[{String, String, [], String } ... ] 現在在這個對象數組中,我需要找到第一個字符串字段(假設關聯)與數組字段(成員的名稱)之間的關系。 我需要弄清楚這些成員每個都屬於多少個關聯。

我目前正在使用json-simple,這就是我的操作方式。

Object obj = parser.parse(new FileReader("c://Users/James McNulty/Documents/School/CMPT 470/Ex 4/exer4-courses.json"));

        JSONArray jsonArray = (JSONArray) obj;

        ArrayList<JSONObject> courseInfo = new ArrayList<JSONObject>();
        Iterator<JSONObject> jsonIterator = jsonArray.iterator();

        while (jsonIterator.hasNext()) {
            courseInfo.add(jsonIterator.next());
            count++;
            //System.out.println(jsonIterator.next());
        }
        //System.out.println(count);

        String course = "";
        String student = "";
        ArrayList<JSONArray> studentsPerCourse = new ArrayList<JSONArray>();
        for (int i=0; i<count; i++) {
            course = (String) courseInfo.get(i).get("course");
            studentsPerCourse.add((JSONArray) courseInfo.get(i).get("students"));
            System.out.println(course);
            System.out.println(studentsPerCourse.get(i));
        }

        ArrayList<String> students = new ArrayList<String>();
        for (int i=0; i<count; i++) {
            for (int j=0; j< (studentsPerCourse.get(i).size()); j++) {
                students.add((String) studentsPerCourse.get(i).get(j));
                //System.out.println(studentsPerCourse.get(i).get(j));
            }
            //System.out.println(student);
        }

        JSONObject object = new JSONObject();
        Map<String, Integer> studentCourses = new HashMap<String, Integer>();
        Set<String> unique = new HashSet<String>(students);
        for (String key : unique) {
            studentCourses.put(key, Collections.frequency(students, key));
            object.put(key, Collections.frequency(students, key));
            //System.out.println(key + ": " + Collections.frequency(students, key));   
        }

        FileWriter file = new FileWriter("c://Users/James McNulty/Documents/School/CMPT 470/Ex 4/output.json");
        file.write(object.toJSONString());
        file.flush();
        file.close();

        System.out.print(object);

想知道simple-json本身是否有更簡單的方法,或者是否還有其他更好的庫。

Google gson非常容易用於編碼和解碼。

最簡單的方法是通過簡單地讓引擎使用反射來填充字段以將它們映射到文件的內容來填充對象,如此處所述 :反序列化只是對gson.fromJson(json, MyClass.class);的調用gson.fromJson(json, MyClass.class); 創建課程后。

似乎您正在嘗試使用Java進行所謂的Collections。 首先,我看一下您的json模型。 構建一個包含上面列出的屬性的類。 然后,代碼將如下所示。

 public void parseJson(){
      // Read your data into memory via String builder or however you choose. 
     List<modelthatyoubuilt> myList = new ArrayList<modelthatyoubuilt>();
     JSONArray myAwarry = new JSONArray(dataString);
     for(int i = 0; i < myAwarry.size(); i++){
     JSONObject j = myAwarry.get(i); 
     modelthatyoubuilt temp = new modelthatyoubuilt();
     temp.setProperty(j.getString("propertyname");
     //do that for the rest of the properties
     myList.add(temp); 

 }

 public int countObjects(ArrayList<modelthatyoubuilt> s){
      return s.size(); 
 }

希望這可以幫助。

public class AccessData {

    /**
     * @param args
     */
    public static void main(String[] args) throws Exception {
        // TODO Auto-generated method stub
        String USER_AGENT = "Mozilla/5.0";
        try {


            String url = "https://webapp2017sql.azurewebsites.net/api/customer";
            URL obj = new URL(url);
            HttpsURLConnection con = (HttpsURLConnection) obj.openConnection();

            //add reuqest header
            con.setRequestMethod("POST");
            con.setRequestProperty("User-Agent", USER_AGENT);
            con.setRequestProperty("Accept-Language", "en-US,en;q=0.5");
            con.setRequestProperty("Content-Type", "application/json");

            // Send post request
            con.setDoOutput(true);
            DataOutputStream wr = new DataOutputStream(con.getOutputStream());
            wr.writeBytes("{\"Id\":1,\"Name\":\"Kamlesh\"} ");
            wr.flush();
            wr.close();

            int responseCode = con.getResponseCode();
            System.out.println("\nSending 'POST' request to URL : " + url);
            System.out.println("Post parameters : " + urlParameters);
            System.out.println("Response Code : " + responseCode);

            BufferedReader in = new BufferedReader(
                    new InputStreamReader(con.getInputStream()));
            String inputLine;
            StringBuffer response = new StringBuffer();

            while ((inputLine = in.readLine()) != null) {
                response.append(inputLine);
            }
            in.close();

            //print result
            System.out.println(response.toString());


        }catch (Exception ex) {
            System.out.print(ex.getMessage());

            //handle exception here

        } finally {
            //Deprecated
            //httpClient.getConnectionManager().shutdown(); 
        }
    }

}

如果您不熟悉JSON,請首先嘗試以下示例創建json文件並在其中寫入數據;

public class JSONWrite 

{

    public static void main(String[] args) 

    {
//      JSONObject class creates a json object

        JSONObject obj= new JSONObject();
//      provides a put function to insert the details into json object

        obj.put("name", "Dinesh");
        obj.put("phone", "0123456789");
        obj.put("Address", "BAngalore");

//      This is a JSON Array List where we Creates an array 

        JSONArray Arr = new JSONArray();

//      Add the values in newly created empty array 

        Arr.add("JSON Array List 1");
        Arr.add("JSON Array List 2");
        Arr.add("JSON Array List 3");

//      adding the array with elements to our JSON Object

        obj.put("Remark", Arr);

        try{

//          File Writer creates a file in write mode at the given location

            FileWriter file = new FileWriter(IAutoconstant.JSONLPATH);

//          Here we convert the obj data to string and put/write it inside the json file

            file.write(obj.toJSONString());
            file.flush();
        }
            catch(Exception e)
            {
                e.printStackTrace();
            }
        }
}

請找到以下代碼以從上面的json文件讀取數據

//使用JsonParser將JSON字符串轉換為Json Object

    JSONParser parser= new JSONParser();

//解析我們之前創建的文件中的JSON字符串

    Object obj=parser.parse(new FileReader(IAutoconstant.JSONLPATH));

// Json字符串已轉換為JSONObject

    JSONObject jsonObject =(JSONObject)obj;

//通過鍵顯示JSON對象的值

    String value1 = (String) jsonObject.get("name");

    System.out.println("value1 is "+value1);

//將JSONObject轉換為JSONArray,因為備注是一個數組。

    JSONArray arrayobject=(JSONArray) jsonObject.get("Remark");

//迭代器用於訪問列表中的每個元素

    Iterator<String> it = arrayobject.iterator();

//只要數組中有元素,循環就會繼續。

    while(it.hasNext())
            {
            System.out.println(it.next());
            }
}

希望對理解json read.write的概念有所幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM