python - JSON的嵌套序列化
问题描述
在成功发布请求后,我试图返回这样的 JSON。
{
"ip": "127.0.0.1",
"ports": [
{port: "", service: ""}
],
"first_scan": "date",
"last_updated": "date"
}
我正在尝试制作我的序列化程序,以便每当我的 nmap 函数在控制台上以这种方式返回数据时:
Host : 127.0.0.1 (localhost) State : up
port : 631 service : CUPS
port : 902 service : VMware Authentication Daemon
port : 6463 service :
port : 8000 service : WSGIServer/0.2 CPython/3.7.3
它会像提到的 JSON 那样解析它。
我试过在我的models.py
class nmapScan(models.Model):
ip = models.CharField(max_length=13, blank=True)
ports = models.CharField(max_length=5)
service = models.TextField()
first_scan = models.DateTimeField(auto_now_add=True)
last_updated = models.DateTimeField(auto_now_add=True)
class Meta:
ordering = ['first_scan']
但是我仍然对这种嵌套序列化概念感到困惑。我将如何继续从我的函数中解析数据,像特定的 JSON 一样返回它并将其正确存储在数据库中(假设我的模型是正确的)?
解决方案
根据您的数据库,您可以使用以下内容:
class nmapScan(models.Model):
ip = models.CharField(max_length=13, blank=True)
services = JSONField() # [{"service": "", "port": ""}, ... ]
first_scan = models.DateTimeField(auto_now_add=True)
last_updated = models.DateTimeField(auto_now_add=True)
class Meta:
ordering = ['first_scan']
#####################
scan = nmapScan.objects.get(...)
for service in scan.services:
service['port']
service['name']
或者
class nmapScan(models.Model):
ip = models.CharField(max_length=13, blank=True)
first_scan = models.DateTimeField(auto_now_add=True)
last_updated = models.DateTimeField(auto_now_add=True)
class Meta:
ordering = ['first_scan']
class Service(models.Model):
port = models.CharField(max_length=5)
name = models.TextField() # service name
scan = ForeignKey(nmapScan, related_name='services')
#####################
scan = nmapScan.objects.get(...)
for service in scan.services.all():
service.port
service.name
推荐阅读
- reactjs - 如何通过反应在块中制作自定义编程语言
- r - 更改环 visNetwork 图的布局
- c++ - 为什么我不能使用函数来查找数组的长度?
- python - 为什么我的标题通知是 python 即使我设置了我想要的方式?
- c - 将类似浮点的字符串转换为c中的浮点数
- c# - C#串口?我正在写我发送的关于读取com端口地址灯的代码,这是错误的
- flutter - 当 imageCache.clear,CustomScrollView 不再保持滚动视图中的图像大小时颤动
- json - SHA1 身份验证公式,用于验证请求
- javascript - 试图将此添加到我在 sqaurespace 上的网站
- openssl - 如何在 C++ 中实现 X509 验证