2016-08-04 66 views
-1

我试图从一个JSON字符串保存变量作为不同功能的设置使用,但不幸的是,他们没有被接受为我想要的那样好。这就是烹饪。Python JSON变量不被接受

JSON字符串来通过MQTT像这样:

def on_message(client, userdata, msg): 
     data = json.loads(msg.payload) 
     camera = picamera.PiCamera() 
     camera.resolution = (2592, 1944) 
     camera.sharpness = data['sharpness'] 
     camera.contrast = data['contrast'] 

然而,当它得到的消息,它的错误了:

> File "/usr/local/lib/python2.7/dist-packages/picamera/camera.py", 
> line 2392, in _set_sharpness 
>  "Invalid sharpness value: %d (valid range -100..100)" % value) TypeError: %d format: a number is required, not unicode 

任何想法,为什么?我真的不知道为什么它与%d来了,而当我打印的数据:

print data['sharpness'] 
>>> 50 

它散发出来的数...

任何帮助真的感谢!

+1

你的JSON包含一个字符串值(' “50”'),而不是数字。 – RemcoGerlich

+0

'print type(data ['sharpness'])''的结果是什么? –

+1

'打印类型(数据['sharpness'])''。你可能(也可能不会)感到惊讶。 – DeepSpace

回答

0

int包裹你的价值观,因为这些都是unicode格式

def on_message(client, userdata, msg): 
     data = json.loads(msg.payload) 
     camera = picamera.PiCamera() 
     camera.resolution = (2592, 1944) 
     camera.sharpness = int(data['sharpness']) 
     camera.contrast = int(data['contrast'])