如何用简单的JSON库将json文件读入java

我想用json简单的库读取这个JSON文件。

我的JSON文件如下所示:

 [ { "name":"John", "city":"Berlin", "cars":[ "audi", "bmw" ], "job":"Teacher" }, { "name":"Mark", "city":"Oslo", "cars":[ "VW", "Toyata" ], "job":"Doctor" } ] 

这是我写的读取这个文件的java代码:

 package javaapplication1; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.util.Iterator; import org.json.simple.JSONArray; import org.json.simple.JSONObject; import org.json.simple.parser.JSONParser; import org.json.simple.parser.ParseException; public class JavaApplication1 { public static void main(String[] args) { JSONParser parser = new JSONParser(); try { Object obj = parser.parse(new FileReader("c:\\file.json")); JSONObject jsonObject = (JSONObject) obj; String name = (String) jsonObject.get("name"); System.out.println(name); String city = (String) jsonObject.get("city"); System.out.println(city); String job = (String) jsonObject.get("job"); System.out.println(job); // loop array JSONArray cars = (JSONArray) jsonObject.get("cars"); Iterator<String> iterator = cars.iterator(); while (iterator.hasNext()) { System.out.println(iterator.next()); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (ParseException e) { e.printStackTrace(); } } } 

但是我得到以下exception:

线程“main”中的exceptionjava.lang.ClassCastException:org.json.simple.JSONArray无法转换为javaapplication1.JavaApplication1.main处的org.json.simple.JSONObject(JavaApplication1.java:24)

有人能告诉我我做错了什么吗? 整个文件是一个数组,并在文件的整个arrays中有对象和另一个数组(汽车)。 但我不知道我怎么能parsing整个数组到一个Java数组。 我希望有人可以帮我在我的代码中缺less的代码行。

谢谢

整个文件是一个数组,并在文件的整个arrays中有对象和另一个数组(汽车)。

正如你所说,你的JSON blob的最外层是一个数组。 因此,你的parsing器将返回一个JSONArray 。 然后你可以从数组中获取JSONObject

  JSONArray a = (JSONArray) parser.parse(new FileReader("c:\\exer4-courses.json")); for (Object o : a) { JSONObject person = (JSONObject) o; String name = (String) person.get("name"); System.out.println(name); String city = (String) person.get("city"); System.out.println(city); String job = (String) person.get("job"); System.out.println(job); JSONArray cars = (JSONArray) person.get("cars"); for (Object c : cars) { System.out.println(c+""); } } 

有关参考,请参见json-simple解码示例页面上的“示例1”。

您可以使用jackson库,只需使用这3行来将您的json文件转换为Java对象。

 ObjectMapper mapper = new ObjectMapper(); InputStream is = Test.class.getResourceAsStream("/test.json"); testObj = mapper.readValue(is, Test.class); 

你可以用Gson来做这个。
GSON是一个Java库,可用于将Java对象转换为JSON表示。 它也可以用来将JSONstring转换为等效的Java对象。

看看这个转换JSON到Java

从JsonFile读取

 public static ArrayList<Employee> readFromJsonFile(String fileName){ ArrayList<Employee> result = new ArrayList<Employee>(); try{ String text = new String(Files.readAllBytes(Paths.get(fileName)), StandardCharsets.UTF_8); JSONObject obj = new JSONObject(text); JSONArray arr = obj.getJSONArray("employees"); for(int i = 0; i < arr.length(); i++){ String name = arr.getJSONObject(i).getString("name"); short salary = Short.parseShort(arr.getJSONObject(i).getString("salary")); String position = arr.getJSONObject(i).getString("position"); byte years_in_company = Byte.parseByte(arr.getJSONObject(i).getString("years_in_company")); if (position.compareToIgnoreCase("manager") == 0){ result.add(new Manager(name, salary, position, years_in_company)); } else{ result.add(new OrdinaryEmployee(name, salary, position, years_in_company)); } } } catch(Exception ex){ System.out.println(ex.toString()); } return result; } 
 import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import org.json.simple.JSONArray; import org.json.simple.JSONObject; import org.json.simple.parser.JSONParser; import org.json.simple.parser.ParseException; public class Delete_01 { public static void main(String[] args) throws FileNotFoundException, IOException, ParseException { JSONParser parser = new JSONParser(); JSONArray jsonArray = (JSONArray) parser.parse(new FileReader( "delete_01.json")); for (Object o : jsonArray) { JSONObject person = (JSONObject) o; String strName = (String) person.get("name"); System.out.println("Name::::" + strName); String strCity = (String) person.get("city"); System.out.println("City::::" + strCity); JSONArray arrays = (JSONArray) person.get("cars"); for (Object object : arrays) { System.out.println("cars::::" + object); } String strJob = (String) person.get("job"); System.out.println("Job::::" + strJob); System.out.println(); } } } 

使用谷歌简单的图书馆。

 <dependency> <groupId>com.googlecode.json-simple</groupId> <artifactId>json-simple</artifactId> <version>1.1.1</version> </dependency> 

请在下面find示例代码:

 public static void main(String[] args) { try { JSONParser parser = new JSONParser(); //Use JSONObject for simple JSON and JSONArray for array of JSON. JSONObject data = (JSONObject) parser.parse( new FileReader("/resources/config.json"));//path to the JSON file. String json = data.toJSONString(); } catch (IOException | ParseException e) { e.printStackTrace(); } } 

对于简单的JSON,如{"id":"1","name":"ankur"}和JSON数组,使用JSONObject来表示JSON数组,如[{"id":"1","name":"ankur"},{"id":"2","name":"mahajan"}]

希望这个例子也有帮助

我已经做了类似于下面的json数组示例的java编码,如下所示:

以下是json数据格式:存储为“EMPJSONDATA.json”

“{EMPNO”:275172,“EMP_NAME”:“Rehan”,“DOB”:“29-02-1992”,“DOJ”:“10-06-2013”​​,“ROLE”:“JAVA DEVELOPER”},

{“EMPNO”:275173,“EMP_NAME”:“GK”,“DOB”:“10-02-1992”,“DOJ”:“11-07-2013”​​,“ROLE”:“WINDOWS ADMINISTRATOR”},

{“EMPNO”:275174,“EMP_NAME”:“Abiram”,“DOB”:“10-04-1992”,“DOJ”:“12-08-2013”​​,“ROLE”:“PROJECT ANALYST”}

{“EMPNO”:275174,“EMP_NAME”:“Mohamed Mushi”,“DOB”:“10-04-1992”,“DOJ”:“12-08-2013”​​,“ROLE”:“PROJECT ANALYST”}]

 public class Jsonminiproject { public static void main(String[] args) { JSONParser parser = new JSONParser(); try { JSONArray a = (JSONArray) parser.parse(new FileReader("F:/JSON DATA/EMPJSONDATA.json")); for (Object o : a) { JSONObject employee = (JSONObject) o; Long no = (Long) employee.get("EMPNO"); System.out.println("Employee Number : " + no); String st = (String) employee.get("EMP_NAME"); System.out.println("Employee Name : " + st); String dob = (String) employee.get("DOB"); System.out.println("Employee DOB : " + dob); String doj = (String) employee.get("DOJ"); System.out.println("Employee DOJ : " + doj); String role = (String) employee.get("ROLE"); System.out.println("Employee Role : " + role); System.out.println("\n"); } } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ParseException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } 

添加Jackson数据绑定:

 <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.9.0.pr2</version> </dependency> 

用相关字段创buildDTO类并阅读JSON文件:

 ObjectMapper objectMapper = new ObjectMapper(); ExampleClass example = objectMapper.readValue(new File("example.json"), ExampleClass.class); 

可能会帮助别人面临相同的问题。你可以加载文件作为string,然后可以将string转换为jsonobject访问值。

 import java.util.Scanner; import org.json.JSONObject; String myJson = new Scanner(new File(filename)).useDelimiter("\\Z").next(); JSONObject myJsonobject = new JSONObject(myJson); 
 package com.json; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.util.Iterator; import org.json.simple.JSONArray; import org.json.simple.JSONObject; import org.json.simple.parser.JSONParser; import org.json.simple.parser.ParseException; public class ReadJSONFile { public static void main(String[] args) { JSONParser parser = new JSONParser(); try { Object obj = parser.parse(new FileReader("C:/My Workspace/JSON Test/file.json")); JSONArray array = (JSONArray) obj; JSONObject jsonObject = (JSONObject) array.get(0); String name = (String) jsonObject.get("name"); System.out.println(name); String city = (String) jsonObject.get("city"); System.out.println(city); String job = (String) jsonObject.get("job"); System.out.println(job); // loop array JSONArray cars = (JSONArray) jsonObject.get("cars"); Iterator<String> iterator = cars.iterator(); while (iterator.hasNext()) { System.out.println(iterator.next()); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (ParseException e) { e.printStackTrace(); } } } 

你可以使用readAllBytes。

return String(Files.readAllBytes(Paths.get(filePath)),StandardCharsets.UTF_8);