JSON通信协议

本文介绍了JSON通信协议,包括其自我描述性特点和独立于语言平台的优势。详细讲解了JSON数据类型,如字符串和对象,并阐述了JSON在Python中的解析方法,如json.dumps()和json.loads()。通过实例展示了JSON字符串与对象之间的转换过程。
Python3.9

Python3.9

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言


提示:本文主要是介绍JSON是什么,JSON对象和JSON字符串的转换。

一、JSON通信协议

JSON通信协议:

  • JSON 是轻量级的文本数据交换格式
  • JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation)

JSON特点:

  • JSON 独立于语言和平台 不限平台
  • JSON 具有自我描述性,更易理解
  • JSON 易于机器解析和生成,并且易于书写和阅读 JSON 使用
  • JavaScript 语法来描述数据对象,但是 JSON 跟XML一样独立于语言和平台。

二、JSON串格式以及解析

1.JSON数据类型

  1. json string:json字符串,在python中打印出来类型为str,格式为’{}’
  2. json object:在python中的dict和list可以作为json object。

2.JSON解析

json.dumps()将json对象转为json string
json.loads() 将json string转为json对象

3.案例

代码如下(示例):

import json # 内置模块

obj = {
 "name": "cici",
 "pwd": "123456",
 "code": "003"
}
print(obj, type(obj))
json_str = json.dumps(obj)  # json对象 转为 json string
print(json_str, type(json_str))
json_obj = json.loads(json_str)  # json string 转为 json对象
print(json_obj, type(json_obj))

运行结果:
在这里插入图片描述

总结

原创不易,一键三连哦~

您可能感兴趣的与本文相关的镜像

Python3.9

Python3.9

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

### JSON通信协议原理 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,广泛用于网络通信中。它以键值对的形式组织数据,结构清晰、易于阅读和解析,因此在客户端与服务器之间的通信中被广泛采用。JSON通信协议的核心原理包括数据的序列化(编码)和反序列化(解码)过程。 在通信过程中,发送方将数据结构转换为JSON格式的字符串,这一过程称为序列化。接收方接收到JSON字符串后,将其解析为原始的数据结构,即反序列化。这种机制确保了数据在网络上传输时的完整性和一致性。 JSON通信通常依赖于HTTP协议进行传输,但也可以使用其他传输协议,如TCP或WebSocket。其通信流程如下: 1. 客户端构建一个JSON对象,包含请求的方法名、参数等信息。 2. 客户端将JSON对象序列化为字符串,并通过网络发送给服务器。 3. 服务器接收到JSON字符串后,进行反序列化,解析出请求的方法名和参数。 4. 服务器执行相应的方法,并将结果再次序列化为JSON字符串返回给客户端。 5. 客户端接收响应并进行反序列化,获取最终的执行结果。 ### JSON通信协议实现方法 要实现基于JSON通信协议,首先需要选择合适的编程语言及其JSON库。大多数现代编程语言都提供了内置或第三方库来支持JSON的序列化和反序列化操作。 #### 1. 使用Python实现JSON通信 Python标准库中包含`json`模块,可以方便地处理JSON数据。以下是一个简单的示例,展示如何使用Python进行JSON通信: ```python import json import socket # 客户端发送请求 def send_request(): # 构建JSON对象 request = { "method": "add", "params": [1, 2] } # 序列化为JSON字符串 json_request = json.dumps(request) # 创建socket连接 client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) client_socket.connect(('localhost', 12345)) # 发送JSON字符串 client_socket.sendall(json_request.encode()) # 接收响应 response = client_socket.recv(1024).decode() # 反序列化响应 result = json.loads(response) print("Result:", result["result"]) client_socket.close() # 服务器端处理请求 def handle_client(connection): try: data = connection.recv(1024).decode() if data: # 反序列化请求 request = json.loads(data) method = request["method"] params = request["params"] # 处理方法调用 if method == "add": result = sum(params) else: result = "Unknown method" # 构建响应 response = {"result": result} # 序列化为JSON字符串 json_response = json.dumps(response) connection.sendall(json_response.encode()) finally: connection.close() def start_server(): server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server_socket.bind(('localhost', 12345)) server_socket.listen(1) print("Server is listening...") while True: connection, addr = server_socket.accept() print("Connected by", addr) handle_client(connection) # 启动服务器 if __name__ == "__main__": import threading server_thread = threading.Thread(target=start_server) server_thread.daemon = True server_thread.start() # 模拟客户端请求 send_request() ``` #### 2. 使用C++实现JSON通信 在C++中,可以使用第三方库如`nlohmann/json`来处理JSON数据。以下是一个简单的示例,展示如何使用C++进行JSON通信: ```cpp #include <iostream> #include <nlohmann/json.hpp> #include <sys/socket.h> #include <netinet/in.h> #include <unistd.h> #include <thread> using json = nlohmann::json; // 服务器端处理请求 void handle_client(int client_socket) { char buffer[1024] = {0}; read(client_socket, buffer, 1024); std::string json_str(buffer); // 反序列化请求 json request = json::parse(json_str); std::string method = request["method"]; json params = request["params"]; // 处理方法调用 int result = 0; if (method == "add") { result = params[0].get<int>() + params[1].get<int>(); } else { result = -1; // 表示未知方法 } // 构建响应 json response; response["result"] = result; std::string json_response = response.dump(); // 发送响应 send(client_socket, json_response.c_str(), json_response.size(), 0); close(client_socket); } void start_server() { int server_fd, new_socket; struct sockaddr_in address; int addrlen = sizeof(address); // 创建socket server_fd = socket(AF_INET, SOCK_STREAM, 0); address.sin_family = AF_INET; address.sin_addr.s_addr = INADDR_ANY; address.sin_port = htons(12345); // 绑定端口 bind(server_fd, (struct sockaddr *)&address, sizeof(address)); listen(server_fd, 3); std::cout << "Server is listening..." << std::endl; while (true) { new_socket = accept(server_fd, (struct sockaddr *)&address, (socklen_t*)&addrlen); std::thread(handle_client, new_socket).detach(); // 多线程处理客户端 } } // 客户端发送请求 void send_request() { int sock = 0; struct sockaddr_in serv_addr; if ((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0) { std::cerr << "Socket creation error" << std::endl; return; } serv_addr.sin_family = AF_INET; serv_addr.sin_port = htons(12345); // 连接服务器 if (connect(sock, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0) { std::cerr << "Connection Failed" << std::endl; return; } // 构建JSON请求 json request; request["method"] = "add"; request["params"] = {1, 2}; std::string json_request = request.dump(); // 发送请求 send(sock, json_request.c_str(), json_request.size(), 0); // 接收响应 char buffer[1024] = {0}; read(sock, buffer, 1024); std::string json_response(buffer); // 反序列化响应 json response = json::parse(json_response); std::cout << "Result: " << response["result"].get<int>() << std::endl; close(sock); } int main() { std::thread server_thread(start_server); server_thread.detach(); // 后台运行服务器 // 模拟客户端请求 std::this_thread::sleep_for(std::chrono::seconds(1)); // 等待服务器启动 send_request(); return 0; } ``` 以上代码展示了如何在Python和C++中实现基于JSON通信协议。通过这些示例,可以看到JSON通信的基本流程以及如何在不同编程语言中实现该协议[^2]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值