JSON.simple 是轻量级的 JSON 处理库,可用于读写 JSON 文件和字符串。
编码/解码的 JSON 将完全符合 JSON 规范 (RFC4627)。
注意:这个库现在已经很老了。
Google GSON 库也是读写 JSON 的另一个不错的选择。
Java 从文件中读取 JSON
要从 file 读取 JSON,我们将使用我们在上一个示例中创建的 JSON 文件。
- 首先,我们将创建
JSONParser
实例来解析 JSON 文件。 - 使用
FileReader
读取 JSON 文件并将其传递给解析器。 - 开始一个一个读取 JSON 对象,基于它们的类型,例如:
JSONArray
和JSONObject
。
package com.onitroad.demo.jsonsimple; 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 ReadJSONExample { @SuppressWarnings("unchecked") public static void main(String[] args) { //JSON 解析器对象,用于解析读取的文件 JSONParser jsonParser = new JSONParser(); try (FileReader reader = new FileReader("employees.json")) { //读取 JSON 文件 Object obj = jsonParser.parse(reader); JSONArray employeeList = (JSONArray) obj; System.out.println(employeeList); // 递归解析的数组 employeeList.forEach( emp -> parseEmployeeObject( (JSONObject) emp ) ); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (ParseException e) { e.printStackTrace(); } } private static void parseEmployeeObject(JSONObject employee) { // 获取employee对象列表 JSONObject employeeObject = (JSONObject) employee.get("employee"); // 获取字段值 firstName String firstName = (String) employeeObject.get("firstName"); System.out.println(firstName); // 获取字段值 lastName String lastName = (String) employeeObject.get("lastName"); System.out.println(lastName); // 获取字段值 website String website = (String) employeeObject.get("website"); System.out.println(website); } }
输出:
[{"employee":{"firstName":"Jamez","lastName":"Kobe","website":"onitroad.com"}},{"employee":{"firstName":"BobRobert","lastName":"JackMa","website":"example.com"}}] Jamez Kobe onitroad.com BobRobert JackMa example.com
www. On IT Road .com
Java将 JSON 写入文件
要将 JSON 测试写入文件,我们将主要使用两个类:
JSONArray
: 将数据写入 json 数组。使用它的add()
方法添加类型为JSONObject
的对象。JSONObject
: 编写 json 对象。使用它的put()
方法来填充字段。
填充上述对象后,使用FileWriter
实例写入JSON 文件。
package com.onitroad.demo.jsonsimple; import java.io.FileWriter; import java.io.IOException; import org.json.simple.JSONArray; import org.json.simple.JSONObject; public class WriteJSONExample { @SuppressWarnings("unchecked") public static void main( String[] args ) { // 定义第1个Employee JSONObject employeeDetails = new JSONObject(); employeeDetails.put("firstName", "Jamez"); employeeDetails.put("lastName", "Kobe"); employeeDetails.put("website", "onitroad.com"); JSONObject employeeObject = new JSONObject(); employeeObject.put("employee", employeeDetails); // 定义第2个Employee JSONObject employeeDetails2 = new JSONObject(); employeeDetails2.put("firstName", "BobRobert"); employeeDetails2.put("lastName", "JackMa"); employeeDetails2.put("website", "example.com"); JSONObject employeeObject2 = new JSONObject(); employeeObject2.put("employee", employeeDetails2); // 添加到列表中 JSONArray employeeList = new JSONArray(); employeeList.add(employeeObject); employeeList.add(employeeObject2); // 将json数据写入文件 try (FileWriter file = new FileWriter("employees.json")) { // 可以将任何 JSONArray或者JSONObject实例写入文件 file.write(employeeList.toJSONString()); file.flush(); } catch (IOException e) { e.printStackTrace(); } } }
输出:
[ { "employee": { "firstName": "Jamez", "lastName": "Kobe", "website": "onitroad.com" } }, { "employee": { "firstName": "BobRobert", "lastName": "JackMa", "website": "example.com" } } ]
Json.simple 的特性
- 完全符合 JSON 规范 (RFC4627)。
- 支持编码、解码/解析和转义 JSON。
- 通过重用 Map 和 List 接口易于使用。
- 支持 JSON 文本的流式输出。
- 高性能。
- 不依赖外部库。
Json.simple Maven
使用 json-simple
maven 依赖更新 pom.xml
。
<dependency> <groupId>com.googlecode.json-simple</groupId> <artifactId>json-simple</artifactId> <version>1.1.1</version> </dependency>
日期:2020-09-17 00:09:41 来源:oir作者:oir