簡體   English   中英

JSON的嵌套序列化

[英]Nested serialization for 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM