0

我已经阅读了 simplejson 文档,但不明白为什么它有时会返回一个带单引号的 json 对象(php 无法理解),而有时会返回一个转义的双引号序列(在 php 中也无法识别)。我可能可以在输出字符串上做正则表达式作为创可贴,但我宁愿了解问题的根源。

例子:

输入:(python中的起始数据)

print stories

{'text': 'HIV/AIDS 有一天,\r\n然后我们把她带回家,我们召集会议并告诉村民我们应该照顾她,并给予她一生所需要的良好照顾她离开了。', 'id': 1215L}

作为一个健全的检查 - json 对象在cherrypy 得到它之前看起来很正常:

print simplejson.dumps( stories )

[{"text": "青春给青春赋能...亚达亚达亚达...", "id": 12828}, {"text": "女性...亚达亚达亚达...", "id" :12828}]

...
import simplejson
return simplejson.dumps( stories )

[cherrypy 发生了一些晦涩难懂的魔法......] 这是cherrypy 中将 json 传递给浏览器的部分:

@cherrypy.expose
def browse_stories(self):
    stories = test_org_match.browse_org_story_matches()
    cherrypy.response.headers['Content-Type'] = 'application/json'
    return json.dumps( stories )

输出(我在通过cherrypy调用这个对象的浏览器中看到的):

"[{\"text\": \"贫困 我们决定偷菜。我们无能为力。我们在没有食物的情况下待了两天,这第三天我们跟不上。我们必须吃点东西,否则我们会死。我们开始慢慢走向香巴,尽可能多地回家做饭吃,感觉好多了。\", \"id\": 33109}, {\"text\": \"Boda Bado 他们只是在交通的基础上,人们可以使用bada-boda 交通工具来回走动,以节省时间\r\n 它帮助村子深处的农村人用摩托车将自己运送到另一只耳朵。\", \"id\": 35931}]"

(随附的文本不同,但这发生在它拉出的任何一个随机文本片段中)

注意:我相信 simplejson 返回一个到处都是单引号的对象的另一种情况是因为我传递了 str(dictionary) 而不是实际的字典。当然,当您提供单引号 json 时,php 会中断。但是“免费”的逃跑让我感到困惑——我认为它正在发生在樱桃内部。

4

1 回答 1

2

我想到了。我的代码使用 json.dumps() 然后再次使用 json.dumps - 所以额外的转义字符是 json 将其视为字符串而不是字典对象。

于 2012-06-15T13:10:21.983 回答