Так что у меня возникают проблемы с чтением Json-файла на Java.Чтение json-файла в Java
Это файл Json с содержанием в этом формате:
{
"_id": 2864071,
"name": "Neustadt",
"country": "DE",
"coord": {
"lon": 12.56667,
"lat": 52.400002
}
}
Это код, я использую:
package controllers;
@Named(value = "cityID")
@SessionScoped
public class getCityIDs implements Serializable {
public long getCityIDs(String name) {
//Read the json file
try {
FileReader reader = new FileReader(filePath);
JSONParser parser = new JSONParser();
JSONObject jsonObject = (JSONObject) parser.parse(reader);
// get a number from the JSON object
String travelName = (String) jsonObject.get("name");
if(travelName.equals(name)){
long id = (long) jsonObject.get("_id");
System.out.println(id);
return id;
} else {
System.out.println("else");
return 0;
}
} catch (FileNotFoundException ex) {
Logger.getLogger(getCityIDs.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException | ParseException ex) {
Logger.getLogger(getCityIDs.class.getName()).log(Level.SEVERE, null, ex);
}
System.out.println("einde functie");
return 0;
// JSONObject jsonObject = (JSONObject) parser.parse(getClass().getResource("/json/city.list.json").toString());
}
public String test(){
return "hello world";
}
}
Однако, это дает мне ошибку на этой линии:
JSONObject jsonObject = (JSONObject) parser.parse(reader);
существо:
Severe: Unexpected token LEFT BRACE({) at position 88.
at org.json.simple.parser.JSONParser.parse(Unknown Source)
at org.json.simple.parser.JSONParser.parse(Unknown Source)
at controllers.getCityIDs.getCityIDs(getCityIDs.java:45)
По какой-то причине он не может прочитать путь к файлу? "Неизвестный источник"? Я не уверен, что я делаю неправильно.
Метод просто возвращает «0», когда я вызываю метод в другом классе, с именем страны «Neustadt». В основном я хочу, чтобы эта функция возвращала идентификатор для определенного города. Имена хранятся в Json вместе с идентификатором.
Редактировать: В идеале я хочу, чтобы иметь возможность анализировать JSON-файл, который находится внутри проекта. Я попытался использовать .getClass(). GetResource ("/ path/to/json"); но это совсем не сработало.
EDIT: FIXED
package controllers;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Serializable;
import java.net.URL;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.enterprise.context.RequestScoped;
import javax.enterprise.context.SessionScoped;
import javax.inject.Named;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
@Named(value = "cityID")
@SessionScoped
public class getCityIDs implements Serializable{
JSONObject jsonObject;
public long getCityIDs(String name) {
try {
JSONParser parser = new JSONParser();
InputStream in = getClass().getResourceAsStream("/dataSteden/stedenNamen1.json");
try (BufferedReader br = new BufferedReader(new InputStreamReader(in))) {
String line;
while ((line = br.readLine()) != null) {
jsonObject = (JSONObject) parser.parse(line);
}
}
String travelName = (String) jsonObject.get("name");
System.out.println("stad: " +travelName);
System.out.println("testttt");
if(travelName.equals(name)){
long id = (long) jsonObject.get("_id");
System.out.println(id);
return id;
} else {
System.out.println("else");
return 5;
}
} catch (FileNotFoundException ex) {
Logger.getLogger(getCityIDs.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException | ParseException ex) {
Logger.getLogger(getCityIDs.class.getName()).log(Level.SEVERE, null, ex);
}
System.out.println("einde functie");
return 0;
// JSONObject jsonObject = (JSONObject) parser.parse(getClass().getResource("/json/city.list.json").toString());
}
public String test(){
return "hello world";
}
}
Неизвестный источник означает, что у вас есть исходный код для простой библиотеки JSON. Кроме того, попробуйте придерживаться правил именования переменных Java. Ваш класс не следует называть 'getCityIds'. Метод может быть, однако. –
Я не уверен, что вы имеете в виду с первой строкой – aze45sq6d
Не беспокойтесь об этом. Java stacktrace пытается предоставить вам номера строк и имена файлов для библиотеки JSON, которые вы используете, и это невозможно. Это то, что означает «Неизвестный источник» в этом выпуске. Что касается фактической ошибки, вы показали действительный JSON, поэтому я не понимаю, почему вы получаете эту ошибку. –