2014-05-09 44 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