Каков наилучший способ загрузки JSONObject из текстового файла json?
Каким будет самый простой способ загрузить файл, содержащий JSON, в JSONObject.
В настоящий момент я использую json-lib.
Это то, что у меня есть, но оно вызывает исключение:
XMLSerializer xml = new XMLSerializer();
JSON json = xml.readFromFile("samples/sample7.json"); //line 507
System.out.println(json.toString(2));
Вывод:
Exception in thread "main" java.lang.NullPointerException
at java.io.Reader.<init>(Reader.java:61)
at java.io.InputStreamReader.<init>(InputStreamReader.java:55)
at net.sf.json.xml.XMLSerializer.readFromStream(XMLSerializer.java:386)
at net.sf.json.xml.XMLSerializer.readFromFile(XMLSerializer.java:370)
at corebus.test.deprecated.TestMain.main(TestMain.java:507)
Ответы
Ответ 1
попробуйте следующее:
public class JsonParsing {
public static void main(String[] args) throws Exception {
InputStream is =
JsonParsing.class.getResourceAsStream( "sample-json.txt");
String jsonTxt = IOUtils.toString( is );
JSONObject json = (JSONObject) JSONSerializer.toJSON( jsonTxt );
double coolness = json.getDouble( "coolness" );
int altitude = json.getInt( "altitude" );
JSONObject pilot = json.getJSONObject("pilot");
String firstName = pilot.getString("firstName");
String lastName = pilot.getString("lastName");
System.out.println( "Coolness: " + coolness );
System.out.println( "Altitude: " + altitude );
System.out.println( "Pilot: " + lastName );
}
}
и это ваш sample-json.txt, должен быть в формате json
{'foo':'bar',
'coolness':2.0,
'altitude':39000,
'pilot':{'firstName':'Buzz',
'lastName':'Aldrin'},
'mission':'apollo 11'}
Ответ 2
Спасибо @Kit Ho за ваш ответ. Я использовал ваш код и обнаружил, что я все время сталкивался с ошибками, когда мой InputStream всегда был null и исключения ClassNotFound при создании JSONObject. Здесь моя версия вашего кода, которая делает трюк для меня:
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import org.apache.commons.io.IOUtils;
import org.json.JSONObject;
public class JSONParsing {
public static void main(String[] args) throws Exception {
File f = new File("file.json");
if (f.exists()){
InputStream is = new FileInputStream("file.json");
String jsonTxt = IOUtils.toString(is, "UTF-8");
System.out.println(jsonTxt);
JSONObject json = new JSONObject(jsonTxt);
String a = json.getString("1000");
System.out.println(a);
}
}
}
Я нашел этот ответ для того, чтобы рассказать о различии между FileInputStream и getResourceAsStream. Надеюсь, это тоже поможет кому-то еще.
Ответ 3
С помощью java 8 вы можете попробовать следующее:
import org.json.JSONException;
import org.json.JSONObject;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
public class JSONUtil {
public static JSONObject parseJSONFile(String filename) throws JSONException, IOException {
String content = new String(Files.readAllBytes(Paths.get(filename)));
return new JSONObject(content);
}
public static void main(String[] args) throws IOException, JSONException {
String filename = "path/to/file/abc.json";
JSONObject jsonObject = parseJSONFile(filename);
//do anything you want with jsonObject
}
}
Ответ 4
Другим способом сделать то же самое можно было бы использовать класс Gson
String filename = "path/to/file/abc.json";
Gson gson = new Gson();
JsonReader reader = new JsonReader(new FileReader(filename));
SampleClass data = gson.fromJson(reader, SampleClass.class);
Это даст объект, полученный после разбора строки json для работы с.