将jms字符串从zmq(C)传输到Python问题

时间:2013-10-19 19:55:38

标签: python c json zeromq

我有一个C程序,它使用Jansson库生成一个JSON字符串。然后通过ZMQ套接字将字符串发送到Python侦听器,该侦听器尝试使用 json 库来解码JSON字符串。我在使用JSON解码时遇到了麻烦,因为我认为引用符号在传输过程中会变得混乱。

在C中,我生成以下JSON对象:

  

{ “股票”: “歌”}

使用以下代码 strcpy(jsonStrArr, "{\"ticker\":\"GOOG\"}\0");

在python中,我使用以下代码打印出我收到的内容: print 'Received ' + repr(rxStr) +' on Queue_B'

我看到的打印输出是:

  

在Queue_B上收到“{u'ticker':u'GOOG'}”

我不是JSON专家,但我认为 u'搞乱了json.loads()函数,因为需要双引号。

我知道我需要对 jsonStrArr 变量做些什么,但不确定是什么?

提前致谢。

1 个答案:

答案 0 :(得分:1)

不,你没有弄乱任何东西。

u'string'表示它是一个unicode字符串。

在python 2中运行

# -*- coding: utf-8 -*-

a = '؏' # It's just some arabic character I googled for, definitely not ascii
b = u'؏' 

print type(a)
>>> <type 'str'>
print type(b)
>>> <type 'unicode'>

所以你的json对象完全有效。

请注意,对于python 3中的两个字符串,我的示例的输出将为<type 'str'>

编辑:尝试在帖子中输出的json.loads确实不起作用。

我发现在python 2.7中打印json代码会将{“ticker”:“GOOG”}更改为{u'ticker':u'GOOG'},但是,这只是一种表示,它仍然是有效的json。

要正确打印json,您必须使用json.dumps功能。所以用json.dumps(rxStr)替换repr(rxStr)

import json

a = json.loads(u'{"ticker": "GOOG"}')

print a
>>> "{u'ticker': u'GOOG'}"
print json.dumps(a)
>>> {"ticker": "GOOG"}

再一次,python 3在打印字符串时的行为会有所不同,因为如果我没记错的话,python 3字符串会自动unicode字符串。