2014-05-09 43 views
0

我想獲得用戶輸入,並從那創建一個JSON對象,並通過一個TCP套接字發送它..但我發送錯誤的JSON對象因爲服務器無法反序列化它(但如果我直接從代碼發送JSON它的工作原理 這裏是我的代碼:Python - 解析字符串到JSON

import socket 
import json 

TCP_IP = '132.72.213.108' 
TCP_PORT = 6666 
BUFFER_SIZE = 1024 

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
s.connect((TCP_IP, TCP_PORT)) 
typeText = raw_input("Enter the type: ") 
argumentsText = raw_input("Enter arguments: ") 
while (typeText != "end"): 
    argumentsText = argumentsText.replace(",","\",\""); 
    argumentsText = "\"" + argumentsText + "\"" 
    data = '{"type":'+typeText+',"parameters":['+argumentsText+']}' 
    print(str({'type':typeText,'parameters':[argumentsText]})) 
    s.send(json.dumps(data)) 
    result = json.loads(s.recv(1024)) 
    print("received: " + str(result)+"\n") 
    typeText = raw_input("Enter the type: ") 
    argumentsText = raw_input("Enter arguments: ") 
s.close() 
+0

問題不是很清楚,你在問什麼?你能提供一個更簡潔的例子嗎? –

回答

1

您正在嘗試STR值(看上去像一個JSON)轉換成JSON字符串

json.dumps是將Python變量(如字典)轉換爲JSON字符串。

dct = {} 
dct["a"] = "Ahahaha" 
dct["b"] = 3.14 

import json 

print json.dumps(dct) 

因此,對於您的情況:

  1. 首先創建有效的數據結構(如字典)你打算送出去
  2. 然後用json.dumps將其轉換爲真正的JSON字符串,並將其發送的數據出。
+0

哦,對了!只需要按原樣發送數據。謝謝! – Javi

+2

@JaviDorfsman是的,發送已經準備好的JSON字符串也是一個選項。但是如果你把它重寫成'json.dumps',你的代碼將變得更加可讀和可靠。 –

+0

好的,我明白了。謝謝! – Javi