Java JSON 处理 (JSON-P) 示例
介绍
由于强大的 Java JSON 处理 (JSON-P) API,Java 程序可以操作 JSON 数据。Web 服务器和客户端经常使用轻量级 JSON 数据传输标准交换数据。JSON-P 提供对象模型 API 和流式 API 作为其处理 JSON 数据的两种主要方法。
让我们讨论这两种策略,并使用示例来说明它们的工作原理和功能。我们希望读者通过理解本文关于 Java JSON 处理 (JSON-P) 示例的解释,了解对象模型 API 和流式 API 以及编程示例。
Java JSON 处理 (JSON-P) 的特性
我们知道 JSON-P 为我们提供了两种不同的处理 JSON 数据的特性:
对象模型 API − 此方法将 JSON 数据显示为由对象、数组和值组成的结构,就像一棵树一样。它类似于 XML 的 DOM 解析器。对象模型 API 简化了在管理小型 JSON 数据时导航和修改 JSON 部分的操作。
流式 API − 流式 API 顺序处理 JSON 数据,而不是将整个 JSON 放入内存中,这使其成为一种更节省内存的方法。它适用于处理大型 JSON 数据,类似于使用 StAX 解析器处理 XML。
使用对象模型 API 读取和解析 JSON 数据
在这个编程示例中,我们将学习如何使用对象模型 API 读取和解析 JSON 数据。
示例
import javax.json.Json;
import javax.json.JsonObject;
import javax.json.JsonReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
public class ModObjtest
{
public static void main(String args []) throws IOException
{
try (InputStream fis = new FileInputStream("data.json");
JsonReader jsonReader = Json.createReader(fis))
{
JsonObject jsonObject = jsonReader.readObject();
// Step 4: fetch data from the JsonObject
String name = jsonObject.getString("name");
int age = jsonObject.getInt("age");
boolean isMarried = jsonObject.getBoolean("isMarried");
// print data
System.out.println("Name: " + name);
System.out.println("Age: " + age);
System.out.println("Married: " + isMarried);
}
}
}
输出
** data.json output**
{
"name": "Sheli Sharma",
"age": 28,
"isMarried": true
}
** ModObjtest.java output**
Name: Sheli Sharma
Age: 28
Married: true
为此,我们在程序中导入了一些重要的包。
javax.json.Json; javax.json.JsonObject; javax.json.JsonReader; java.io.FileInputStream; java.io.IOException; java.io.InputStream;
之后,我们定义了一个名为 ModObjTest 的类,并在类中调用了 main() 函数。在 main 函数中,我们抛出 IOException 并打开一个输入流以从文件读取 JSON 数据。
try (InputStream fis = new FileInputStream("data.json");
之后,我们创建了一个 JsonReader 来读取 JSON 数据,方法是创建名为 jsonReader 的类的对象并调用名为 readObject() 的函数。
JsonReader jsonReader = Json.createReader(fis)) {
现在,我们通过创建名为 jsonObject 的名为 jsonObject 的类的对象并调用名为 readobject() 的函数,将 JSON 数据解析为 JsonObject。
JsonObject jsonObject = jsonReader.readObject();
现在,我们通过声明一个名为“name”的字符串并调用名为 getString() 的函数并将“name”的值作为函数括号内的参数来从 JsonObject 中获取数据。
String name = jsonObject.getString("name");
现在,我们声明了另一个名为“age”的变量,它是整数类型,并调用另一个名为 getInt() 的函数,并将“age”的值作为函数括号内的参数。
int age = jsonObject.getInt("age");
现在,我们调用了另一个名为 getBoolean() 的函数,并将“isMarried”的值作为函数括号内的参数,并将该值存储到另一个名为“ismarried”的布尔类型变量中。
boolean isMarried = jsonObject.getBoolean("isMarried");
现在,我们打印所有数据以获得所需的输出。
System.out.println("Name: " + name);
System.out.println("Age: " + age);
System.out.println("Married: " + isMarried);
使用 JSON-P 流式 API 生成 JSON 数据
在这个特殊的编程示例中,我们将了解如何使用 JSON-P 流式 API 生成 JSON 数据。
示例
import javax.json.Json;
import javax.json.JsonObject;
import javax.json.stream.JsonGenerator;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
public class StreamJsontest
{
public static void main(String args []) throws IOException
{
try (OutputStream fos = new FileOutputStream("output.json");
JsonGenerator jsonGenerator = Json.createGenerator(fos))
{
// Generate JSON data using the Streaming API
jsonGenerator.writeStartObject()
.write("name", "Aishee")
.write("age", 25)
.write("isStudent", true)
.writeStartObject("indianName")
.write("firstName", "Aarav")
.write("lastName", "Sharma")
.writeEnd()
.writeStartObject("indianAddress")
.write("homeNo", "325")
.write("street", "SY Avenue")
.write("hometown", "Kolkata")
.write("state", "WB")
.write("pin", "400001")
.writeEnd()
.writeEnd();
// Close the JSON generator
jsonGenerator.close();
}s
// Read JSON data from the file and convert it to a string
String jsonString = readJsonFromFile("output.json");
System.out.println(jsonString);
}
private static String readJsonFromFile(String file) throws IOException
{
try (InputStream fis = new FileInputStream(file);
JsonReader jsonReader = Json.createReader(fis)) {
JsonObject jsonObject = jsonReader.readObject();
return jsonObject.toString();
}
}
}
输出
{"name":"Aishee","age":25,"isStudent":true,
"indianName":{"firstName":"Aarav","lastName":"Sharma"},
"indianAddress":{"homeNo":"325","street":"SY Avenue",
"hometown":"Kolkata","state":"WB","pin":"400001"}}
为此,首先我们在程序中导入了一些重要的包。
javax.json.Json; javax.json.JsonObject; javax.json.JsonReader; java.io.FileInputStream; java.io.IOException; java.io.InputStream;
现在,我们定义了一个名为 StreamJsonTest 的类,并在函数中调用了抛出 IOException 的 main() 函数。在 main() 函数中,我们通过调用名为 writeStarObject() 的函数使用流式 API 生成 JSON 数据。
jsonGenerator.writeStartObject()
现在,我们通过调用另一个名为 json.genearator 的函数关闭 json 生成器。
jsonGenerator.close();
之后,我们读取文件中的 JSON 数据并将其转换为字符串,方法是调用另一个名为 readJsonFromFile() 的重要函数并打印 json 字符串。
String jsonString = readJsonFromFile("output.json");
System.out.println(jsonString);
现在,我们抛出了另一个重要的 throws IOException 并将 jsonReadObject 创建为名为 jsonReadObject 的类,并调用另一个名为 createReader() 的函数。
JsonReader jsonReader = Json.createReader(fis))
最后,我们返回了 jsonObject.toString()。
结论
在本文中,我们涵盖了 Java 中 JSON 处理的所有主要主题。这是关于当前 IT 软件开发行业现状的 Java 的一个非常重要的主题。Java 中 JSON 处理的价值是无价的。因此,我们尽最大努力用逻辑编程示例及其解释来涵盖该主题的所有方面。
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP