我有一个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 变量做些什么,但不确定是什么?
提前致谢。
答案 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字符串。