(Исключение в потоке «main» org.json) Текст JSONObject должен начинаться с ‘{‘ символа 1

#java #json

#ява #json #java

Вопрос:

Мне было трудно прочитать мой файл json в каталоге: E:1PROGRAMMINGPadlocksrcpadlockregisterinfo.json

 {
  "users": [
    {
      "Email": "3",
      "Second Name": "2",
      "Age": "123",
      "Name": "1",
      "Password": "4"
    }
  ]
}
  

Проблема в том, что каждый раз, когда я пытаюсь прочитать свой файл содержимого как объект json, я получаю ошибку, похожую на заголовок сообщения.
Основная идея состоит в том, чтобы прочитать этот файл json, чтобы добавить нового пользователя в массив «users» внутри моего объекта json и создать базовую базу данных локальных пользователей.

 private static void  SignUp() throws IOException, JSONException, ParseException {
        //System.out.println("SignUp");
        String path = "E:\1PROGRAMMING\Padlock\src\padlock\register\info.json";
        String[] labels = {"Age","Name","Second Name","Email","Password"};
        ArrayList<String> dataUser = new ArrayList<>();

      
        Scanner scanner = new Scanner(System.in);

        //check if value Integer
        System.out.println(labels[0]);
        int age = Integer.parseInt(scanner.nextLine());

        if( age >= 18) {
            dataUser.add(Integer.toString(age)); //adding age data to arraylist as first data

            for (int element =1;element< labels.length;element  ){ //adding rest of data
                System.out.println(labels[element]);
                String data = scanner.nextLine();
                dataUser.add(data);
            }
            /////////////////////////////////////////////////
            //Spring data request to Python serverless
            /////////////////////////////////////////////////

            System.out.println(dataUser);

            //Add to JSON file
            File exists = new File(path);
            if (exists.exists()) {//check if json exists
                System.out.println("File found.");
                //addToJson()
                addToJson(path, dataUser); //HERE IS THE PROBLEM
            }else{
                System.out.println("File not found... Creating File with the new user");
                //createJson()
                createJson(path, dataUser, labels);
                //createJson(path, name, secondName,age,email,password);
            }
        }else {
            System.out.println("You must be more than 18 years old.");
            System.exit(0);
        }

    }
  

И функция addToJson, в которой я хочу прочитать и отредактировать свой файл

 private static void addToJson(String path, ArrayList<String> dataUser) throws IOException, ParseException, JSONException {
        //create jsonobject to add in our path file
        
        //read path file content
        JSONObject ar = new JSONObject(path);

        for (int i = 0; i < ar.length(); i  ) {
            System.out.println( "Name: "   ar.getString("Password") );
        }
        
        //Add jsonobject created into our path file

    }
  

И он выводит это сообщение об ошибке:

** Исключение в потоке «main» org.json.JSONException: текст JSONObject должен начинаться с ‘{‘ символа 1 в E:1PROGRAMMINGPadlocksrcpadlockregisterinfo.json **

Комментарии:

1. опубликовали ответ, дайте мне знать, сработал ли он для вас.

Ответ №1:

Я думаю, что это может быть из-за того, что он считывает мой файл josn как строку и находит «[» в неправильном индексе, но мне нужно найти способ, которым я могу прочитать его как элемент Json или получить прямой доступ к «users» JSONArray внутри него

Ответ №2:

Ваш JSON правильный, вы можете проверить наhttps://jsonformatter.curiousconcept.com /#

Проблема в строке

 JSONObject ar = new JSONObject(path);
  

поскольку ваша переменная path имеет тип String , JSONObject не знает, является ли это путем к .json файлу, следовательно, он пытается разобрать <file Location> в JSON, и вы получаете JSONParseException
отсюда ошибка, попробуйте это

 String text = new String(Files.readAllBytes(Paths.get(fileName)),StandardCharsets.UTF_8);
JSONObject obj = new JSONObject(text);
  

Ответ №3:

 public class Foo {

    public static void main(String[] args) throws IOException {
        Path path = Paths.get("e:/info.json");
        Map<Long, User> users = loadUsers(path);
        signUp(users);
        saveUsers(path, users);
    }

    public static Map<Long, User> loadUsers(Path path) throws IOException {
        JSONObject root = readRootObject(path);
        Map<Long, User> users = new HashMap<>();

        if (root != null) {
            for (Object obj : root.getJSONArray("users")) {
                JSONObject json = (JSONObject)obj;

                User user = new User();
                user.setId(json.getLong("id"));
                user.setEmail(json.getString("email"));
                user.setName(json.getString("name"));
                user.setSecondName(json.getString("secondName"));
                user.setId(json.getInt("age"));
                user.setPassword(json.getString("password"));

                users.put(user.getId(), user);
            }
        }

        return users;
    }

    public static void saveUsers(Path path, Map<Long, User> users) throws IOException {
        JSONObject root = Optional.ofNullable(readRootObject(path)).orElseGet(JSONObject::new);
        root.put("users", users.values());

        try (Writer writer = Files.newBufferedWriter(path, StandardCharsets.UTF_8)) {
            writer.write(root.toString(2));
        }
    }

    private static JSONObject readRootObject(Path path) throws IOException {
        if (!Files.isReadable(path))
            return null;

        try (Reader reader = Files.newBufferedReader(path, StandardCharsets.UTF_8)) {
            return new JSONObject(new JSONTokener(reader));
        }
    }

    public static void signUp(Map<Long, User> users) {
        try (Scanner scan = new Scanner(System.in)) {
            User user = new User();
            System.out.print("Enter age: ");
            user.setAge(scan.nextInt());

            if (user.getAge() < 18)
                throw new RuntimeException("You must be more than 18 years old.");

            System.out.print("Enter email: ");
            user.setEmail(scan.next());

            System.out.print("Enter name: ");
            user.setName(scan.next());

            System.out.print("Enter second name: ");
            user.setSecondName(scan.next());

            System.out.print("Enter password: ");
            user.setPassword(scan.next());

            user.setId(System.nanoTime());
            users.put(user.getId(), user);
        }
    }

}