数据交换格式主要分为纯文本格式,XML格式和JSON格式。其中纯文本格式是一种简单的,无格式的数据交换方式;而XML格式和JSON格式可以带有描述信息,它们叫做”自描述的“结构化文档。

JSON是一种轻量级的数据交换格式,所谓轻量级,是与XML文档结构相比而言的,描述项目的字符少,所以描述相同数据所需的字符个数要少,那么传输速度就会提高,流量就会减少。由于Web和移动平台开发对流量的要求是要尽可能少,对速度要求尽可能快,而轻量级的数据交换格式JSON就成为理想的数据交换格式。

构成JSON文档的两种结构为对象和数组。对象是”名称-值“对集合,它类似于Java中Map类型,而数组是一连串元素的集合。

下面是一个JSON对象的例子:

{"name":"a.htm","size":345,"saved":true
}

下面是一个JSON数组的例子:

["text","html","css"]

由于目前Java官方没有提供JSON编码和解码所需的类库,所以需要使用第三方JSON库,这里推荐使用JSON-java库。JSON-java库提供源代码,最重要的是不依赖于其他第三方库,不需要再去找其他的库。可以在https://github.com/stleary/JSON-java下载源码。

将JSON-java库源代码文件添加到工程中,需要两个步骤:

1.创建org.json包

JSON-java库中的源代码文件都隶属于org.json包。为此需要在Eclipse项目的src源代码文件夹中创建org.json包。

2.复制源代码文件

org.json包创建好后,需要将JSON-java库文件夹中的源代码文件复制到Eclipse工程的org.json包中。如下图所示:

案例:聊天工具

JSON和XML真正在进行数据交换的时候,它们存在的形式就是一个很长的字符串,这个字符串在网络中传输或者存储于磁盘等介质中。在传输和存储之前需要把JSON对象转换成为字符串才能传输和存储,这个过程称为”编码“过程。接收方需要将接收到的字符串转换成为JSON对象,这个过程称为”解码“过程。

为了进一步熟悉JSON数据交换格式,使用JSON进行数据交换来实现聊天工具。JSON格式内部结构是自定义的。代码如下:

{"message":"hello","userid":"javaee","username":"二丢"
}

服务器端ChatServer代码如下:

package json;
import org.json.JSONObject;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;public class ChatServer {public static void main(String[] args) {System.out.println("服务器运行...");Thread t=new Thread(()->{try (//创建一个ServerSocket监听端口8080客户请求ServerSocket server=new ServerSocket(8080);//使用accept()阻塞等待客户端请求Socket socket=server.accept();DataInputStream in=new DataInputStream(socket.getInputStream());DataOutputStream out=new DataOutputStream(socket.getOutputStream());BufferedReader keyboardIn=new BufferedReader(new InputStreamReader(System.in))){while(true){/*接收数据*/String str=in.readUTF();//JSON解码JSONObject jsonObject=new JSONObject(str);//打印接收的数据System.out.printf("从客户端接收的数据:%s\n",jsonObject);/*发送数据*///读取键盘输入的字符串String keyboardInputString=keyboardIn.readLine();//结束聊天if(keyboardInputString.equals("bye")){break;}//编码jsonObject=new JSONObject();jsonObject.put("message", keyboardInputString);jsonObject.put("userid", "acid");jsonObject.put("username", "赵1");//发送out.writeUTF(jsonObject.toString());out.flush();}} catch (IOException e) {e.printStackTrace();}System.out.println("服务器停止...");});t.start();}}

接收数据时对接收到的字符串进行解码,并返回JSON对象,注意要解码的字符串应该是有效的JSON字符串。

发送数据时需要创建JSON对象,并且添加JSON对象。代码中jsonObject.toString()语句是将JSON对象转换为JSON字符串。

客户端ChatClient代码如下:

package json;
import org.json.JSONObject;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;
import java.net.UnknownHostException;public class ChatClient {public static void main(String[] args) {System.out.println("客户端运行...");Thread t=new Thread(()->{try(//向127.0.0.1主机8080端口发出连接请求Socket socket=new Socket("127.0.0.1",8080);DataInputStream in=new DataInputStream(socket.getInputStream());DataOutputStream out=new DataOutputStream(socket.getOutputStream());BufferedReader keyboardIn=new BufferedReader(new InputStreamReader(System.in))) {while(true){/*发送数据*///读取键盘输入的字符串String keyboardInputString=keyboardIn.readLine();//结束聊天if(keyboardInputString.equals("bye")){break;}JSONObject jsonObject=new JSONObject();jsonObject.put("message", keyboardInputString);jsonObject.put("userid", "javaee");jsonObject.put("username", "二丢");//发送out.writeUTF(jsonObject.toString());out.flush();/*接收数据*/String str=in.readUTF();jsonObject=new JSONObject(str);//打印接收的数据System.out.printf("从服务器接收的数据:%s\n", str);}} catch (UnknownHostException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}System.out.println("客户端停止!");});t.start();}}

【Java】JSON数据交换格式及其使用案例(聊天工具)相关推荐

  1. 使用 C++ 处理 JSON 数据交换格式

    From: http://blog.csdn.net/xt_xiaotian/article/details/5648388 使用 C++ 处理 JSON 数据交换格式 一.摘要 JSON 的全称为: ...

  2. XML和JSON 数据交换格式

    为什么80%的码农都做不了架构师?>>>    一.什么是数据交换格式? 客户端与服务器常用数据交换格式xml.json.html 二.数据交换格式应用场景 移动端(安卓.IOS)通 ...

  3. 数据交换格式Json与XML

    什么是数据交换格式: 主流的有Json.XML.HTML. 数据交换格式的应用场景: 移动端(安卓,IOS)通讯方式采用http协议+Json格式的restful风格. 很多互联网公司都是用Http协 ...

  4. 基于JSON数据交换模型的实时支付系统设计和实现

    随着支付行业向各类便民账单服务.金融服务类扩展,支付内核采用固定格式数据交换模型已不能适应快速灵活开发的需要.以JSON为基础构建精简3层数据交换模型,并对JSON内存分配管理.键值使用进行优化,实现 ...

  5. Ajax--概述、xhr对象的常用属性和方法、xhr的常用事件、xhr对象发送POST请求、xhr对象发送GET请求、xhr对象的兼容性问题、数据交换格式(XML、JSON)

    一.概述 1.1 发展历程 在开始之前先来看一下Ajax的工作原理吧,如下图所示: Ajax全称Asynchronous javascript and xml(异步 JavaScript 和 XML) ...

  6. Ajax学习(3)XMLHttpRequest的使用+数据交换格式(JSON)

    XMLHttpRequest的使用 XMLHttpRequest(简称 xhr)是浏览器提供的 Javascript 对象,可以请求服务器上的数据资源.(jQuery 中的 Ajax 函数,就是基于 ...

  7. XML和JSON两种数据交换格式的比较

    目前,在web开发领域,主要的数据交换格式有XML和JSON,对于XML相信每一个web developer都不会感到陌生: 相比之下,JSON可能对于一些新步入开发领域的新手会感到有些陌生,也可能你 ...

  8. JSON——IT技术人员都必须要了解的一种数据交换格式

    JSON作为目前Web主流的数据交换格式,是每个IT技术人员都必须要了解的一种数据交换格式.尤其是在Ajax和REST技术的大行其道的当今,JSON无疑成为了数据交换格式的首选! 今天大家就和猪哥一起 ...

  9. 于数据交换格式XML和JSON的比较

    目前,在web开发领域,主要的数据传输格式有XML和JSON,对于XML相信每一个web developer都不会感到陌生:相比之下,JSON可能对于一些新步入开发领域的新手会感到有些陌生,也可能你之 ...

最新文章

  1. 深入理解Java 8 Lambda表达式(Oracle官方文档版)
  2. 关于write()和fsync()
  3. STM32F4 HAL库开发 -- GPIO
  4. 10个让人厌烦的编程语言
  5. 从零开始发布自己的NPM包
  6. Linux执行定时任务(crontab)遇到的坑
  7. OpenCV:回调函数
  8. 3-3HDFS中文件的读写操作
  9. GitHub 使用教程图文详解(转)
  10. 【转】Google Chrome中顺时针/逆时针滚动圆的含义
  11. ajax 共有6种加载方式 (自己总结简单明了)
  12. 为啥vb被计算机二级取消,计算机二级vb考试是不是今年最后一年
  13. linux flex安装包,安装flex builder for Linux在Ubuntu
  14. c语言程序设计 点菜系统,C语言点餐系统
  15. [收藏] Flash闪存颗粒和工艺知识深度解析
  16. 计算机工业设计id,我所认识的工业设计(ID)
  17. 大富翁论坛和delphi盒子已正常开放
  18. 魔兽争霸显示比例调整的问题
  19. Element日期选择器带快捷选项切换日期类型
  20. 小程序成为多社交平台引流利器

热门文章

  1. 架设WIN32汇编程序的开发环境
  2. 【图文详解】,配置NLB群集
  3. Python指南--错误和异常
  4. MongoDB的存储结构及对空间使用率的影响
  5. 【iOS】Illegal Configuration: The Label outlet from the ViewController to the UILabel is invalid. Outl
  6. 空间装扮代码_你多久没进过QQ空间了
  7. linux下的tuxedo开发实例
  8. linux内核分析--异步io(二)
  9. Fragment懒加载(三)
  10. java 日期格式 毫秒