मैं टेक्स्ट फ़ील्ड से जेसन फ़ाइल में डेटा सहेजने के साथ फंस गया हूं। नीचे यह कोड बहुत अच्छा काम कर रहा है, लेकिन मेरे ऐप को पुनरारंभ करने के बाद और नया obj2 जोड़ने का प्रयास करें, पिछला डेटा हटा रहा है। मैंने एपेंड का उपयोग करने की कोशिश की, लेकिन फिर यह जेसन फ़ाइल में [] से सहेज रहा था। मेरी दूसरी समस्या जेसन फ़ाइल में मेरे डेटा को सुंदर लिखना है, मैं इस विधि को अपने कोड में लागू नहीं कर सकता, न जाने क्यों। अगर आपके पास कुछ विचार है कि इसे कैसे हल किया जाए तो मैं आभारी रहूंगा।

JSONObject obj1 = new JSONObject();
JSONObject obj2 = new JSONObject();
obj1.put("name", tfNameOfMedicine.getText());
obj1.put("amount",tfAmountOfMedicine.getText());
obj2.put("Medicine", obj1);
    if(!checkIfInBase()) {
        arr.add(obj2);
        try (FileWriter Data = new FileWriter("Data.JSON")) {

            Data.write(arr.toJSONString());
            Data.flush();
            JOptionPane.showMessageDialog(null, "Saved!");
        } catch (Exception ex) {
            JOptionPane.showMessageDialog(null, "Error");

        }
    }else{JOptionPane.showMessageDialog(null, "This medicine exist in data base");}

    tfAmountOfMedicine.setText("");
    tfNameOfMedicine.setText("");
}

एलेक्स रुडेंको टिप्पणी के अनुसार: 1. मुझे नहीं पता कि मैं गिरफ्तारी को दोबारा पढ़ता हूं, मैं इसे निजी घोषणा के नीचे इस तरह बना रहा हूं।

JSONArray arr = new JSONArray();

2. यह मेरी जाँच विधि है।

private boolean checkIfInBase() {
    JSONObject obj1 = new JSONObject();
    JSONObject obj2 = new JSONObject();
    int size = arr.size();
    obj1.put("name", createMedicine().getName());
    obj1.put("amount", createMedicine().getAmount());
    obj2.put("Medicine", obj1);
    boolean a = false;
    for (int i = 0; i < size; i++) {
        if (obj1.equals(arr.get(i))) {
            a = true;
            break;
        }
    }
    return a;
}

3. मैं json.simple का उपयोग कर रहा हूँ

-1
Maciek Groszyk 30 अप्रैल 2020, 16:23

1 उत्तर

सबसे बढ़िया उत्तर
  1. यह बहुत संभावना है कि json.simple में सुंदर मुद्रण की सुविधा नहीं है, और यह काफी पुराना है, इसलिए मैं किसी अन्य पुस्तकालय में स्विच करने का सुझाव देता हूं। नीचे दिए गए उदाहरण में मैं org.json का उपयोग करूंगा

  2. आपको अपनी json फ़ाइल को फिर से पढ़ना होगा और arr वैरिएबल को इनिशियलाइज़ करना होगा।

  3. आप सरणी में अपने JSON ऑब्जेक्ट्स की समानता को स्ट्रिंग्स में परिवर्तित करके और तुलना करके जांच सकते हैं।

  4. अपनी JSON फ़ाइल को फिर से लिखना ठीक करें।

import java.io.*;
import org.json.JSONTokener;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

public class JsonExample {

private static JSONArray initArray(String jsonFileName) throws IOException, JSONException {
    String json = "";
    File jsonFile = new File(jsonFileName);
    if (!jsonFile.exists()) {
        return new JSONArray();
    }

    try (BufferedReader reader = new BufferedReader(new FileReader(jsonFile))) {
        String line;
        while ((line = reader.readLine()) != null) {
            json += line;
        }
    }
    JSONTokener tokener = new JSONTokener(json);
    JSONArray readArr = new JSONArray(tokener);
    System.out.println("Read arr: " + readArr.toString());
    return readArr;
}

private static boolean isInDB(JSONObject obj, JSONArray arr) throws JSONException {
    for (int i = 0; i < arr.length(); i++) {
        JSONObject item = arr.getJSONObject(i);
        if (obj.toString().equals(item.toString())) {
            return true;
        }
    }
    return false;
}

private static JSONArray saveArray(JSONArray arr, String jsonFileName) throws JSONException, IOException {
    try (FileWriter Data = new FileWriter(jsonFileName)) {
        Data.write(arr.toString(4)); // setting spaces for indent
    }
    return arr;
}

// main method
public static void main(String[] args) throws Exception {
    JSONArray arr = initArray("DataMedicine.json");

    JSONObject obj = new JSONObject();
    obj.put("name", "Antivirin");
    obj.put("amount", 15);
    JSONObject medicine = new JSONObject();
    medicine.put("medicine3", obj);

    if (!isInDB(medicine, arr)) {
        arr.put(medicine);
        saveArray(arr, "DataMedicine.json");
    } else {
        System.out.println("Already exists in DB: " + obj);
    }
}
}
0
Alex Rudenko 30 अप्रैल 2020, 15:34