0

我有一个使用 Jansson 库生成 JSON 字符串的 C 程序。然后该字符串通过 ZMQ 套接字发送到 Python 侦听器,该侦听器正在尝试使用json库来解码 JSON 字符串。我在使用 JSON 解码时遇到问题,因为我认为引号符号在传输过程中被弄乱了。

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

{"ticker":"GOOG"}

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

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

我看到的打印输出是:

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

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

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

提前致谢。

4

1 回答 1

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 对象是完全有效的。

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

编辑:在您的帖子中的输出上尝试 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 字符串。

于 2013-10-19T23:57:37.190 回答