You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中解析HTTP POST请求的嵌套JSON字符串并提取键值?

解析POST请求中嵌套的转义JSON字段

我用Python的BaseHTTPRequestHandler实现了一个HTTP服务,用于接收外部应用发送的JSON格式POST请求。请求Payload里的objectJSON字段是一个转义后的JSON字符串,需要提取该字段并解析出其中的所有键值对,目前仅能提取字符串,无法解析内部结构。

修改后的完整脚本

import json
import logging
from http.server import BaseHTTPRequestHandler, HTTPServer

class S(BaseHTTPRequestHandler):
    def _set_response(self):
        self.send_response(200)
        self.send_header('Content-type', 'text/html')
        self.end_headers()

    def do_GET(self):
        logging.info("GET request,\nPath: %s\nHeaders:\n%s\n", str(self.path), str(self.headers))
        self._set_response()
        self.wfile.write("GET request for {}".format(self.path).encode('utf-8'))

    def do_POST(self):
        content_length = int(self.headers['Content-Length'])
        post_data = self.rfile.read(content_length)

        self._set_response()
        self.wfile.write("POST request for {}".format(self.path).encode('utf-8'))
        
        # 解析外层JSON结构
        json_obj = json.loads(post_data)
        # 提取objectJSON字段的转义字符串
        object_json_str = json_obj["objectJSON"]
        # 解析内层转义JSON为Python字典
        object_data = json.loads(object_json_str)
        
        # 遍历输出所有键值对,可按需修改处理逻辑
        for key, value in object_data.items():
            print(f'"{key}":"{value}"')

def run(server_class=HTTPServer, handler_class=S, port=8090):
    logging.basicConfig(level=logging.INFO)
    server_address = ('', port)
    httpd = server_class(server_address, handler_class)
    logging.info('Starting httpd...\n')
    try:
        httpd.serve_forever()
    except KeyboardInterrupt:
        pass
    httpd.server_close()
    logging.info('Stopping httpd...\n')

if __name__ == '__main__':
    from sys import argv

    if len(argv) == 2:
        run(port=int(argv[1]))
    else:
        run()

关键修改说明

  • 对提取到的objectJSON字符串,额外调用一次json.loads(),将转义的JSON格式字符串转换为Python字典
  • 通过遍历字典的items()方法,可以逐个获取键值对,根据业务需求进行打印、存储或返回等操作

测试输出

使用提供的示例Payload发送POST请求后,控制台将输出:

"Enter Sleep":"0"
"Exit Sleep":"0"
"Low Power":"0"
"Packet":"Uplink alerting message"
"Power Off":"0"
"Remove Device":"0"
"SOS Exit":"1"
"Time Stamp":"6:04:24 2022/1/31"
"Wearing Device":"0"

内容的提问来源于stack exchange,提问作者bizkit1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 03:25:16