2010-12-19 49 views
0

我要写出这个JSON响应所有的变量:如何逃脱字符时读取JSON

"result": { 
    "\/common\/topic\/weblink": [ 
     { 
     "url": "http:\/\/www.boardgamegeek.com\/boardgame\/13", 
     "description": "BoardGameGeek" 
     } 
    ], 
    "id": "\/en\/settlers_of_catan" 
    } 

所以拿到ID:

result.id 

可是我怎么获取值为“\/common \/topic \/weblink”?

+0

您目前使用哪些库来处理json? – 2010-12-19 19:54:57

+0

我正在使用Freebase-Python:http://code.google.com/p/freebase-python/ – 2010-12-19 20:19:47

+0

根据Freebase-Python中提供的示例,这应该起作用 - result [“\/common \/topic \/weblink“] [”url“] - 但它会抛出错误, - TemplateSyntaxError:无法解析余数:[”\/common \/topic \/weblink“] [”url“] – 2010-12-19 20:22:53

回答

0

你想要的东西像

result["\/common\/topic\/weblink"][0].url 

(我认为)

+0

我以为也可能工作,但没有骰子。 – 2010-12-19 20:16:36

+0

为了清楚起见,您的示例有一个错字。它应该是:result [“\/common \/topic \/weblink”] [0] .url – 2010-12-19 20:18:09

+0

这最终是正确的答案。我将结果对象传递给一个html模板,由于某种原因我不清楚,我无法从JSON结果中访问键,但是在Python类中访问它们时没有问题。 – 2010-12-20 01:19:36

0

尝试

result.__getattribute__("\/common\/topic\/weblink")[0].url 
+0

TemplateSyntaxError:变量和属性不能以下划线开头:'result .__ getattribute__' – 2010-12-19 20:41:29

2

"\/common\/topic\/weblink"解析字符串/common/topic/weblink。任何访问解码内容的API都应使用生成的非转义数据;转义只是JSON编码的一部分。

这工作得很好,利用包含在Python标准的JSON模块,我强烈建议你使用,而不是第三方那些除非你有一个非常强有力的理由是不同的:

import json 

json_data = r""" 
{ 
    "result": { 
    "\/common\/topic\/weblink": [ 
     { 
     "url": "http:\/\/www.boardgamegeek.com\/boardgame\/13", 
     "description": "BoardGameGeek" 
     } 
    ], 
    "id": "\/en\/settlers_of_catan" 
    } 
}""" 

data = json.loads(json_data) 
print data["result"]["/common/topic/weblink"] 

请注意,您在我添加的对象上省略了括号。

+0

谢谢Glenn。在Python 2.5.5中作为Google App Engine的限制,我相信json是在2.6中引入的,让我试试吧 – 2010-12-19 20:48:57

+0

如果它安装在较旧版本的Python中,它可能被称为“simplejson”(请注意,任何托管服务这在2010年仍然是2.5,显然没有被合理维护,因此不应该被认为是不平凡的。) – 2010-12-19 20:57:01

+0

我觉得我很接近,我导入了simplejson,并且尝试了加载函数>>> >>> json_result = simplejson。加载(结果)但是我收到一个错误(TypeError:expect编辑字符串或缓冲区),因为结果对象不是字符串。 – 2010-12-19 21:05:11