Contents
21.4. 数据交换格式¶
21.4.1. JSON数据编码和解码¶
编码¶
package com.a51work.cn;
import com.a51work.cn.org.json.JSONArray;
import com.a51work.cn.org.json.JSONException;
import com.a51work.cn.org.json.JSONObject;
public class Json_encode {
public static void main(String[] args) {
try {
JSONObject jsonObject = new JSONObject();
jsonObject.put("name", "hujianli");
jsonObject.put("age", 30);
JSONArray jsonArray = new JSONArray();
jsonArray.put(1).put(3);
jsonObject.put("a", jsonArray);
// 编码完成
System.out.println(jsonObject.toString());
} catch (JSONException e) {
e.printStackTrace();
}
}
}
解码¶
package com.a51work.cn;
import com.a51work.cn.org.json.JSONArray;
import com.a51work.cn.org.json.JSONException;
import com.a51work.cn.org.json.JSONObject;
public class JSON_decode {
public static void main(String[] args) {
String jsonString = "{\"name\":\"tony\", \"age\":30, \"a\":[1, 3]}";
try {
JSONObject jsonObject = new JSONObject(jsonString);
String name = jsonObject.getString("name");
System.out.println("name : " + name);
int age = jsonObject.getInt("age");
System.out.println("age : " + age);
JSONArray jsonArray = jsonObject.getJSONArray("a");
int n1 = jsonArray.getInt(0);
System.out.println("数组a第一个元素 : " + n1);
int n2 = jsonArray.getInt(1);
System.out.println("数组a第二个元素 : " + n2);
} catch (
JSONException e) {
e.printStackTrace();
}
}
}
21.4.2. 案例:聊天工具¶
JSON_chatServer.java
package com.a51work.cn;
import com.a51work.cn.org.json.JSONObject;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
public class JSON_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","hujianli1");
//发送
out.writeUTF(jsonObject.toString());
out.flush();
}
} catch (Exception e) {
e.printStackTrace();
}
});
t.start();
}
}
JSON_chatClient.java
package com.a51work.cn;
import com.a51work.cn.org.json.JSONObject;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.InputStreamReader;
import java.net.Socket;
public class JSON_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", "胡建力2");
//发送
out.writeUTF(jsonObject.toString());
out.flush();
//接收数据
String str = in.readUTF();
jsonObject = new JSONObject(str);
//打印接收的数据
System.out.printf("从服务器接收的数据:【%s】\n", str);
}
} catch (Exception e) {
System.out.println("服务器暂时未启动........");
}
System.out.println("客户端停止!");
});
t.start();
}
}