Получение TypeError: Объект типа set не поддерживает сериализацию JSON при попытке опубликовать словарь через REST-API - PullRequest
0 голосов
/ 18 мая 2019

Попытка POST через REST-API, некоторый JSON объект, но с некоторой проблемой и получением ошибки TypeError: Object of type set is not JSON serializable

Получение ошибки при попытке отправить agentResource_info в REST-API

    def agentresource(self):
        global fogarea_info
        while self.deviceID_cimiresource is None:
            time.sleep(0.1)
        deviceID = self.userID
        dID = str(deviceID)
        # devID = {"device": dID}
        MyleaderID = {str(self.deviceID_cimiresource)}

        while self._running:

            dynamic = dynamic_info()
            devdyna = json.loads(dynamic)
            devwifiip = devdyna['wifiAddress']
            devethip = devdyna['ethernetAddress']
            devips = [*devethip, *devwifiip]
            devIP = str(', '.join(devips))
            devip = str(devIP)

            r2 = requests.get("http://cimi:8201/api/device-dynamic",headers={"slipstream-authn-info": "internal ADMIN"}, verify=False)
            dynamics_info = r2.json()
            rs_info = dynamics_info['deviceDynamics']
            ips1 = [item['wifiAddress'] for item in rs_info]
            ips2 = [item['ethernetAddress'] for item in rs_info]
            ips3 = [*ips1, *ips2]
            childips = str(ips3)
            backupip = 'None'
            authenticated = True
            connect = True
            isleader = True


            agentResource_info = json.dumps({"device_id": MyleaderID, "device_ip": devip, "leader_id": dID, "leader_ip": devip, "authenticated": authenticated, "connected": connect, "isLeader": isleader, "backup_ip": backupip, "childrenIPs": childips})

            #print("I'm here can you see me!!!!")
            #agentRes_info = json.dumps(agentResource_info)
            #print(agentResource_info)
            try:
                if self.count is 0:
                    r1 = requests.post("http://cimi:8201/api/agent-resource",headers={"slipstream-authn-info": "internal ADMIN"},json=agentRes_info, verify=False)
                    print('r1', r1, r1.request, r1.reason, r1.json())
                    self.count = r1.json()['count']
                else:
                    r1 = requests.put("http://cimi:8201/api/agent-resource",headers={"slipstream-authn-info": "internal ADMIN"},json=agentRes_info, verify=False)
                    print('r1', r1, r1.request, r1.reason, r1.json())


            except ConnectionError as e:
                print(e)
                r1 = "No response"
                print(r1)

            time.sleep(60)

1 Ответ

0 голосов
/ 18 мая 2019

Вы писали:

        MyleaderID = {str(self.deviceID_cimiresource)}

, и snakecharmerb указывает, что set не будет сериализован, поскольку это не нативный тип JSON.Вместо этого лучше назначить str.

Также pep-8 просит использовать строчный snake_case для таких имен переменных: my_leader_id

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...