java封装json串示例

Welcome to the Java JSON Example Tutorial. JSON (JavaScript Object Notation) is text-based lightweight technology for generating human readable formatted data. JSON represent object data in the form of key-value pairs. We can have nested JSON objects too and it provides an easy way to represent arrays also.

欢迎使用Java JSON示例教程。 JSON (JavaScript对象表示法)是一种基于文本的轻量级技术,用于生成人类可读的格式化数据。 JSON以键值对的形式表示对象数据。 我们也可以嵌套JSON对象,它还提供了一种表示数组的简便方法。

Java JSON (Java JSON)

JSON is widely used in web applications or as server response because it’s lightweight and more compact than XML. JSON objects are easy to read and write and most of the technologies provide support for JSON objects. That’s why JSON in Java web services are very popular.

JSON被广泛用于Web应用程序或服务器响应,因为它比XML轻巧且紧凑。 JSON对象易于读写,并且大多数技术都提供对JSON对象的支持。 这就是Java Web服务中JSON非常流行的原因。

JSR353 finally made into Java EE 7 and it’s the Java JSON processing API. jsonp is the reference implementation for Java JSON Processing API. We can use this in maven project by adding following dependency.

JSR353最终被制成Java EE 7,它是Java JSON处理API。 jsonp是Java JSON处理API的参考实现。 我们可以在maven项目中通过添加以下依赖项来使用它。

<dependency><groupId>org.glassfish</groupId><artifactId>javax.json</artifactId><version>1.0.2</version>
</dependency>

If you are using GlassFish 4.0 then you can keep the scope as provided because it’s already included in the server.

如果您使用的是GlassFish 4.0,则可以保留提供的范围,因为它已包含在服务器中。

JSON API provides two ways for JSON processing:

JSON API提供了两种JSON处理方式:

  1. Object Model API – It’s similar to DOM Parser and good for small objects.对象模型API –与DOM分析器相似,适用于小型对象。
  2. Streaming API – It’s similar to StaX Parser and good for large objects where you don’t want to keep whole object in memory.流API –与StaX Parser相似, 适用于不想将整个对象保留在内存中的大型对象。

Some important interfaces of Java JSON API are:

Java JSON API的一些重要接口是:

  1. javax.json.JsonReader: We can use this to read JSON object or an array to JsonObject. We can get JsonReader from Json class or JsonReaderFactory.javax.json.JsonReader :我们可以使用它来读取JSON对象或JsonObject的数组。 我们可以从Json类或JsonReaderFactory获取JsonReader。
  2. javax.json.JsonWriter: We can use this to write JSON object to output stream.javax.json.JsonWriter :我们可以使用它编写JSON对象以输出流。
  3. javax.json.stream.JsonParser: This works as a pull parser and provide streaming support for reading JSON objects.javax.json.stream.JsonParser :这用作拉解析器,并提供流支持以读取JSON对象。
  4. javax.json.stream.JsonGenerator: We can use this to write JSON object to output source in streaming way.javax.json.stream.JsonGenerator :我们可以使用它来以流方式将JSON对象写入输出源。
  5. javax.json.Json: This is the factory class for creating JSON processing objects. This class provides the most commonly used methods for creating these objects and their corresponding factories. The factory classes provide all the various ways to create these objects.javax.json.Json :这是用于创建JSON处理对象的工厂类。 此类提供了创建这些对象及其相应工厂的最常用方法。 工厂类提供了创建这些对象的所有各种方式。
  6. javax.json.JsonObject: JsonObject represents an immutable JSON object value.javax.json.JsonObject :JsonObject表示一个不变的JSON对象值。

Let’s look into the usage of Java JSON API with simple program, we have a JSON object stored in a file employee.txt as;

让我们通过简单的程序来研究Java JSON API的用法,我们在一个名为employee.txt的文件中存储了一个JSON对象;

{"id":123,"name":"Pankaj Kumar","permanent":true,"address":{"street":"El Camino Real","city":"San Jose","zipcode":95014},"phoneNumbers":[9988664422, 1234567890],"role":"Developer"
}

We have java bean classes that represent above JSON format as:

我们有将上述JSON格式表示为的Java bean类:

package com.journaldev.model;import java.util.Arrays;public class Employee {private int id;private String name;private boolean permanent;private Address address;private long[] phoneNumbers;private String role;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public boolean isPermanent() {return permanent;}public void setPermanent(boolean permanent) {this.permanent = permanent;}public Address getAddress() {return address;}public void setAddress(Address address) {this.address = address;}public long[] getPhoneNumbers() {return phoneNumbers;}public void setPhoneNumbers(long[] phoneNumbers) {this.phoneNumbers = phoneNumbers;}public String getRole() {return role;}public void setRole(String role) {this.role = role;}@Overridepublic String toString(){StringBuilder sb = new StringBuilder();sb.append("***** Employee Details *****\n");sb.append("ID="+getId()+"\n");sb.append("Name="+getName()+"\n");sb.append("Permanent="+isPermanent()+"\n");sb.append("Role="+getRole()+"\n");sb.append("Phone Numbers="+Arrays.toString(getPhoneNumbers())+"\n");sb.append("Address="+getAddress());sb.append("\n*****************************");return sb.toString();}
}
package com.journaldev.model;public class Address {private String street;private String city;private int zipcode;public String getStreet() {return street;}public void setStreet(String street) {this.street = street;}public String getCity() {return city;}public void setCity(String city) {this.city = city;}public int getZipcode() {return zipcode;}public void setZipcode(int zipcode) {this.zipcode = zipcode;}@Overridepublic String toString(){return getStreet() + ", "+getCity()+", "+getZipcode();}
}

I have overridden the toString() method to return human readable String representation that we will use in our JSON implementation classes.

我重写了toString()方法,以返回人类可读的String表示形式,该表示形式将在JSON实现类中使用。

Java JSON阅读示例 (Java JSON Read Example)

package com.journaldev.json;import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;import javax.json.Json;
import javax.json.JsonArray;
import javax.json.JsonObject;
import javax.json.JsonReader;
import javax.json.JsonValue;import com.journaldev.model.Address;
import com.journaldev.model.Employee;public class EmployeeJSONReader {public static final String JSON_FILE="employee.txt";public static void main(String[] args) throws IOException {InputStream fis = new FileInputStream(JSON_FILE);//create JsonReader objectJsonReader jsonReader = Json.createReader(fis);/*** We can create JsonReader from Factory alsoJsonReaderFactory factory = Json.createReaderFactory(null);jsonReader = factory.createReader(fis);*///get JsonObject from JsonReaderJsonObject jsonObject = jsonReader.readObject();//we can close IO resource and JsonReader nowjsonReader.close();fis.close();//Retrieve data from JsonObject and create Employee beanEmployee emp = new Employee();emp.setId(jsonObject.getInt("id"));emp.setName(jsonObject.getString("name"));emp.setPermanent(jsonObject.getBoolean("permanent"));emp.setRole(jsonObject.getString("role"));//reading arrays from jsonJsonArray jsonArray = jsonObject.getJsonArray("phoneNumbers");long[] numbers = new long[jsonArray.size()];int index = 0;for(JsonValue value : jsonArray){numbers[index++] = Long.parseLong(value.toString());}emp.setPhoneNumbers(numbers);//reading inner object from json objectJsonObject innerJsonObject = jsonObject.getJsonObject("address");Address address = new Address();address.setStreet(innerJsonObject.getString("street"));address.setCity(innerJsonObject.getString("city"));address.setZipcode(innerJsonObject.getInt("zipcode"));emp.setAddress(address);//print employee bean informationSystem.out.println(emp);}}

The implementation is straight forward and feels similar as getting parameters from HashMap. JsonReaderFactory implements Factory Design Pattern. Once we execute above program, we get following output.

该实现很简单,感觉就像从HashMap获取参数一样。 JsonReaderFactory实现了工厂设计模式 。 一旦执行了上面的程序,我们将得到以下输出。

***** Employee Details *****
ID=123
Name=Pankaj Kumar
Permanent=true
Role=Developer
Phone Numbers=[9988664422, 1234567890]
Address=El Camino Real, San Jose, 95014
*****************************

Java JSON编写示例 (Java JSON Write Example)

package com.journaldev.json;import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.OutputStream;import javax.json.Json;
import javax.json.JsonArrayBuilder;
import javax.json.JsonObject;
import javax.json.JsonObjectBuilder;
import javax.json.JsonWriter;import com.journaldev.model.Address;
import com.journaldev.model.Employee;public class EmployeeJSONWriter {public static void main(String[] args) throws FileNotFoundException {Employee emp = createEmployee();JsonObjectBuilder empBuilder = Json.createObjectBuilder();JsonObjectBuilder addressBuilder = Json.createObjectBuilder();JsonArrayBuilder phoneNumBuilder = Json.createArrayBuilder();for (long phone : emp.getPhoneNumbers()) {phoneNumBuilder.add(phone);}addressBuilder.add("street", emp.getAddress().getStreet()).add("city", emp.getAddress().getCity()).add("zipcode", emp.getAddress().getZipcode());empBuilder.add("id", emp.getId()).add("name", emp.getName()).add("permanent", emp.isPermanent()).add("role", emp.getRole());empBuilder.add("phoneNumbers", phoneNumBuilder);empBuilder.add("address", addressBuilder);JsonObject empJsonObject = empBuilder.build();System.out.println("Employee JSON String\n"+empJsonObject);//write to fileOutputStream os = new FileOutputStream("emp.txt");JsonWriter jsonWriter = Json.createWriter(os);/*** We can get JsonWriter from JsonWriterFactory alsoJsonWriterFactory factory = Json.createWriterFactory(null);jsonWriter = factory.createWriter(os);*/jsonWriter.writeObject(empJsonObject);jsonWriter.close();}public static Employee createEmployee() {Employee emp = new Employee();emp.setId(100);emp.setName("David");emp.setPermanent(false);emp.setPhoneNumbers(new long[] { 123456, 987654 });emp.setRole("Manager");Address add = new Address();add.setCity("Bangalore");add.setStreet("BTM 1st Stage");add.setZipcode(560100);emp.setAddress(add);return emp;}}

Once we run above application, we get following response:

一旦我们在应用程序上运行,我们将得到以下响应:

Employee JSON String
{"id":100,"name":"David","permanent":false,"role":"Manager","phoneNumbers":[123456,987654],"address":{"street":"BTM 1st Stage","city":"Bangalore","zipcode":560100}}

JSON object is also getting saved in emp.txt file. JsonObjectBuilder implements builder pattern that makes it very easy to use.

JSON对象也被保存在emp.txt文件中。 JsonObjectBuilder实现了易于使用的构建器模式

Java JSON解析器示例 (Java JSON Parser Example)

Java JsonParser is a pull parser and we read the next element with next() method that returns an Event object. javax.json.stream.JsonParser.Event is an Enum that makes it type-safe and easy to use. We can use in switch case to set our java bean properties.

Java JsonParser是拉式解析器,我们使用next()方法读取下一个元素,该方法返回一个Event对象。 javax.json.stream.JsonParser.Event是一个枚举 ,使其类型安全且易于使用。 我们可以在switch情况下使用来设置我们的java bean属性。

package com.journaldev.json;import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;import javax.json.Json;
import javax.json.stream.JsonParser;
import javax.json.stream.JsonParser.Event;import com.journaldev.model.Address;
import com.journaldev.model.Employee;public class EmployeeJSONParser {public static final String FILE_NAME = "employee.txt";public static void main(String[] args) throws IOException {InputStream fis = new FileInputStream(FILE_NAME);JsonParser jsonParser = Json.createParser(fis);/*** We can create JsonParser from JsonParserFactory also with below code* JsonParserFactory factory = Json.createParserFactory(null);* jsonParser = factory.createParser(fis);*/Employee emp = new Employee();Address address = new Address();String keyName = null;List<Long> phoneNums = new ArrayList<Long>();while (jsonParser.hasNext()) {Event event = jsonParser.next();switch (event) {case KEY_NAME:keyName = jsonParser.getString();break;case VALUE_STRING:setStringValues(emp, address, keyName, jsonParser.getString());break;case VALUE_NUMBER:setNumberValues(emp, address, keyName, jsonParser.getLong(), phoneNums);break;case VALUE_FALSE:setBooleanValues(emp, address, keyName, false);break;case VALUE_TRUE:setBooleanValues(emp, address, keyName, true);break;case VALUE_NULL:// don't set anythingbreak;default:// we are not looking for other events}}emp.setAddress(address);long[] nums = new long[phoneNums.size()];int index = 0;for(Long l :phoneNums){nums[index++] = l;}emp.setPhoneNumbers(nums);System.out.println(emp);//close resourcesfis.close();jsonParser.close();}private static void setNumberValues(Employee emp, Address address,String keyName, long value, List<Long> phoneNums) {switch(keyName){case "zipcode":address.setZipcode((int)value);break;case "id":emp.setId((int) value);break;case "phoneNumbers":phoneNums.add(value);break;default:System.out.println("Unknown element with key="+keyName);  }}private static void setBooleanValues(Employee emp, Address address,String key, boolean value) {if("permanent".equals(key)){emp.setPermanent(value);}else{System.out.println("Unknown element with key="+key);}}private static void setStringValues(Employee emp, Address address,String key, String value) {switch(key){case "name":emp.setName(value);break;case "role":emp.setRole(value);break;case "city":address.setCity(value);break;case "street":address.setStreet(value);break;default:System.out.println("Unknown Key="+key);}}}

The major complexity comes when we need to write the logic to parse the data and sometimes it can get complex.

当我们需要编写逻辑来解析数据时,有时会变得很复杂,这是主要的复杂性。

Since we are reading the same file as JsonReader, the output is same as EmployeeJsonReader program.

由于我们正在读取与JsonReader相同的文件,因此输出与EmployeeJsonReader程序相同。

Java JsonGenerator示例 (Java JsonGenerator Example)

package com.journaldev.json;import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;import javax.json.Json;
import javax.json.stream.JsonGenerator;import com.journaldev.model.Employee;public class EmployeeJSONGenerator {public static void main(String[] args) throws IOException {OutputStream fos = new FileOutputStream("emp_stream.txt");JsonGenerator jsonGenerator = Json.createGenerator(fos);/*** We can get JsonGenerator from Factory class also* JsonGeneratorFactory factory = Json.createGeneratorFactory(null);* jsonGenerator = factory.createGenerator(fos);*/Employee emp = EmployeeJSONWriter.createEmployee();jsonGenerator.writeStartObject(); // {jsonGenerator.write("id", emp.getId()); // "id":123jsonGenerator.write("name", emp.getName());jsonGenerator.write("role", emp.getRole());jsonGenerator.write("permanent", emp.isPermanent());jsonGenerator.writeStartObject("address") //start of address object.write("street", emp.getAddress().getStreet()).write("city",emp.getAddress().getCity()).write("zipcode",emp.getAddress().getZipcode()).writeEnd(); //end of address objectjsonGenerator.writeStartArray("phoneNumbers"); //start of phone num arrayfor(long num : emp.getPhoneNumbers()){jsonGenerator.write(num);}jsonGenerator.writeEnd(); // end of phone num arrayjsonGenerator.writeEnd(); // }jsonGenerator.close();}}

JsonGenerator is very easy to use and provides good performance for large data.

JsonGenerator非常易于使用,并为大数据提供良好的性能。

That’s all for Java JSON Processing API. We learned about Java JSON Parser, Read and Write examples. You can download java project from below link and play around with it.

Java JSON处理API就是这样。 我们了解了Java JSON解析器,读取和写入示例。 您可以从下面的链接下载Java项目并进行试用。

Download Java JSON Project下载Java JSON项目

References:

参考文献:

JSONLint – Great web tool to validate JSON data
JSON Processing Reference Implementation
JSR353 JCP Page

JSONLint –验证JSON数据的出色网络工具
JSON处理参考实现
JSR353 JCP页面

翻译自: https://www.journaldev.com/2315/java-json-example

java封装json串示例

java封装json串示例_Java JSON示例相关推荐

  1. java 设计模式 示例_Java设计模式–示例教程

    java 设计模式 示例 Design Patterns are very popular among software developers. A design pattern is a well- ...

  2. Java绘画板源码_Java 绘图板 示例源码下载(画板)

    Java 绘图板 示例源码下载(画板) java 2020-8-21 下载地址 https://www.codedown123.com/36795.html package minidrawpad; ...

  3. java示例_Java入门示例

    第一个Java程序 public class HelloWorld { public static void main(String []args) { System.out.println(&quo ...

  4. java json特殊字符处理_java json字符串传递给 js 时 特殊字符转义错误 研究

    一些换行 回车等符号需要转义 主要注意 单引号 与双引号. 一 如果js以 双引号接收字符串 则转单引号 "  至 \" 否则js报错 二 如果js以 单引号接收字符串 则转单引号 ...

  5. java 方法 示例_Java 9示例–收集的工厂方法–创建不可修改的列表,集合和映射...

    java 方法 示例 大家好,这是我在该博客上发表的有关Java 9功能的第一篇文章,今天您将了解我最喜欢的功能"收集的工厂方法" ,它是JEP 269的一部分.JEP代表JDK增 ...

  6. java多线程示例_Java线程示例

    java多线程示例 Welcome to the Java Thread Example. Process and Thread are two basic units of execution. C ...

  7. java反射用法示例_Java反射示例教程

    java反射用法示例 Java Reflection provides ability to inspect and modify the runtime behavior of applicatio ...

  8. java 泛型示例_Java泛型示例教程–泛型方法,类,接口

    java 泛型示例 Java Genrics is one of the most important features introduced in Java 5. Java Genrics是Java ...

  9. java遍历易百教程_Java LineNumberReader示例

    LineNumberReader是一个缓冲的字符输入流,用于跟踪行号. 它是BufferedReader的子类,它提供了另外的方法setLineNumber()和getLineNumber(),分别用 ...

最新文章

  1. 2010年终总结---戏说茅台酒涨价
  2. 经典笔试题:用C写一个函数测试当前机器大小端模式
  3. 过滤选择器——可见性过滤选择器
  4. php yii框架源码,yii 源码解读
  5. python调用ctypes中windll中的方法超时处理_python中使用ctypes调用MinGW生成的动态链接库(dll)...
  6. sass导入sass_如何使用Sass Mixins和Loops
  7. SUSE12SP3-Mycat(4)rule.xml配置详解
  8. java单链表选票_Hackerrank Practice
  9. 肠道微生物组在人类神经系统疾病中的作用
  10. 多网卡多网关设置错误:RTNETLINK answers: File exists
  11. 2022-8-03 第七小组 黄均睿 学习日记 (day27)线程2
  12. Web前端之jQuery 一
  13. 跟谁一起工作,到底有多重要?
  14. Android辅助H5做一个Web版的相册功能
  15. python运维工程师前景_运维工程师的前景怎么样
  16. 云原生周报 | 2021下半年CNCF开源项目发展总结;Cilium 1.11发布;BFE Server及控制面更新
  17. 基于脑机接口的光感知视觉机制模型
  18. 隐藏浏览器滚动条但内容可以滚动的3种解决方式(简单清晰)
  19. IOS如何访问通讯录
  20. LLC变换器不同工作频率对比

热门文章

  1. Rabbit-音乐欣赏
  2. [转载] python不允许使用关键字_Python中关键字global与nonlocal的区别
  3. [转载] 初学者python笔记(字符串用法解析)
  4. [转载] Python基础——Numpy库超详细介绍+实例分析+附代码
  5. [转载] javascript入门_WebAssembly入门-仅使用14行JavaScript
  6. VIVADO常见警告、错误及解决方法
  7. Activity与Fragment生命周期
  8. 截获3389远程登陆的密码
  9. 相机标定(四)—— 仿射变换和透视变换
  10. 图像处理程序,在状态栏显示图像尺寸