web-dev-qa-db-fra.com

Comment envoyer un objet json en utilisant tcp socket en python

voici mon client python tcp. Je veux envoyer un objet JSON au serveur. Mais je ne peux pas envoyer l'objet à l'aide de la méthode sendall (). Comment puis-je faire ceci?

import socket
import sys
import json

Host, PORT = "localhost", 9999

m ='{"id": 2, "name": "abc"}'
jsonObj = json.loads(m)


data = jsonObj

# Create a socket (SOCK_STREAM means a TCP socket)
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

try:
    # Connect to server and send data
    sock.connect((Host, PORT))
    sock.sendall(jsonObj)


    # Receive data from the server and shut down
    received = sock.recv(1024)
finally:
    sock.close()

print "Sent:     {}".format(data)
print "Received: {}".format(received)
5

Ignorez la partie json.loads(). Envoyez l'objet json en tant que chaîne json et chargez-le à partir de la chaîne sur le client TCP.

Vérifiez également: Dictionnaire d’envoi Python via TCP

3
Moinuddin Quadri

Dès que vous pouvez le savoir depuis le dictionnaire d’envoi Python via TCP Il est préférable de convertir l’objet JSON en dictionnaire et d’utiliser l’extrait de code suivant. 

import json
data = json.load(open("data.json"))
 //or 
data = json.load('{"id": 2, "name": "abc"}')

type(data)
print(data[<keyFromTheJsonFile>])

Vous devriez le sérialiser avec pickle :

import pickle
dict = {...}
tcp_send(pickle.dumps(dict))

Et à l'autre bout:

import pickle
dict = pickle.loads(tcp_recieve())

Si l’autre extrémité n’est pas écrite en python, vous pouvez utiliser un format de sérialisation des données, tel que xml , json ou yaml .

1
Yusef Mohamadi