【问题标题】:Printing/Parsing JSON object from RDF query result从 RDF 查询结果打印/解析 JSON 对象
【发布时间】:2011-08-21 06:21:39
【问题描述】:

我正在尝试解析来自 Sesame 的 SPARQL 查询的结果。 我找到了示例代码,下面的相关部分,我在下面显示了我的结果。

(response, content) = httplib2.Http().request(endpoint, 'POST', urllib.urlencode(params), headers=headers)

print "Response %s" % response.status
results = json.loads(content)
print "\n".join([result['type']['value'] for result in results['results']['bindings']])

{

   "head": {

       "vars": [ "costar", "movie" ]

   },

   "results": {

       "bindings": [

           {

               "costar": { "type": "uri", "value": "http:\/\/rdf.freebase.com\/ns\/en.connie_nielsen" },

               "movie": { "type": "uri", "value": "http:\/\/rdf.freebase.com\/ns\/en.basic_2003" }

           },

           {

               "costar": { "type": "uri", "value": "http:\/\/rdf.freebase.com\/ns\/en.timothy_daly" },

               "movie": { "type": "uri", "value": "http:\/\/rdf.freebase.com\/ns\/en.basic_2003" }

           },


      ]

   }

}     

但我得到这个错误:

Traceback (most recent call last):
  File "C:\Software\rdflib\movieSparqlQuery.py", line 45, in <module>
    print "\n".join([result['type']['value'] for result in results['results']['b
indings']])
KeyError: 'type'
Press any key to continue . . .

如何更改“打印”语句?

我想看到的是像 costar 和电影名字在同一行:

http://rdf.freebase.com/ns/en.connie_nielsen  http://rdf.freebase.com/ns/en.basic_2003

稍后,我将剥离命名空间。

谢谢!

【问题讨论】:

    标签: python json parsing printing rdflib


    【解决方案1】:

    看看SPARQLWrapper的示例代码:

    for result in results["results"]["bindings"]:
        print(result["label"]["value"])
    

    【讨论】:

      【解决方案2】:

      您收到的错误表明result 字典没有键'type'。如果您仔细检查,results['results']['bindings'] 的每个元素都是具有两个键的字典:'costar''movie',因此您的 result 变量将是具有这两个键的字典。

      result['costar']result['movie'] 中的每一个也是具有两个键的字典:'type''value'。您真正想要的是构建一个包含result['costar']['value']result['movie']['value'] 的字符串,并用空格分隔。给定一个result,您可以通过以下方式实现:

      " ".join(result[var]['value'] for var in results['head']['vars'])
      

      现在要打印包含由换行符分隔的所有 costars 和电影的字符串,您只需将 print 语句修改为

      print "\n".join([" ".join(result[var]['value'] for var in results['head']['vars']) for result in results['results']['bindings']])
      

      【讨论】:

      • 谢谢,完美。我仍然在 Python 中完成了必须的 JSON;更习惯 XML 和其他语言。
      猜你喜欢
      • 2011-06-23
      • 1970-01-01
      • 1970-01-01
      • 2017-12-15
      • 1970-01-01
      • 2018-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多