如何用简单的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
表示。 它也可以用来将JSON
string转换为等效的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);
- 在Java中recursion地删除目录
- Java:组件中的setPreferredSize()和setSize()方法之间的区别
- C#与Javagenerics
- 在Java 8中是否有相当于Scala的呢?
- 在java程序中执行另一个jar
- Spring获取当前的ApplicationContext
- Java EE应用程序中的java.lang.NoSuchMethodError:org.apache.commons.codec.binary.Base64.encodeBase64String()
- StringUtils.isBlank()vs String.isEmpty()
- 听众之一适合可见性的JPanel被改变