繁体   English   中英

在Python中编写从SPARQL查询返回的JSON数据的正确方法

[英]Correct way to write JSON data returned from a SPARQL query in Python

我正在使用python3进行SPARQL查询。 我需要阅读一个Virtuoso数据库并输出三元组。 三元组中的某些数据包含特殊字符,例如换行符等。

无论如何,我可以像这样获取数据:

queryString = "some query"
sparql.setQuery(queryString)
sparql.setReturnFormat(JSON)
try:
    jsonData = sparql.query()
    for result in jsonData:
        print('Result: ***')
        f.write(str(result) + '\n')
except:
    print("Oops:", sys.exc_info()[0], file=sys.stderr)

这样做时,我在文件中得到以下输出:

b'{\n'
b'  "head" : {\n'
b'    "vars" : [\n'
b'      "subject",\n'
b'      "predicate",\n'
b'      "object"\n'
b'    ]\n'
b'  },\n'
b'  "results" : {\n'
b'    "bindings" : [\n'
b'      {\n'
b'        "predicate" : {\n'
b'          "type" : "uri",\n'
b'          "value" : "http://www.w3.org/1999/02/22-rdf-syntax-ns#type"\n'
b'        },\n'
b'        "subject" : {\n'
b'          "type" : "uri",\n'
b'          "value" : "http://www.ontologyrepository.com/CommonCoreOntologies/delimits"\n'
b'        },\n'
b'        "object" : {\n'
b'          "type" : "uri",\n'
b'          "value" : "http://www.w3.org/2002/07/owl#InverseFunctionalProperty"\n'
b'        }\n'
b'      },\n'

等等。 我不确定b前缀在这些行上的作用。 无论如何,我在使用JSON库阅读时遇到了麻烦。 所以我更喜欢用JSON编写它。

我想用一个简单的东西代替for循环

json.dump(jsonData, f)

要么

json.dumps(jsonData, f)

当我这样做时,我收到错误消息, Oops: <class 'TypeError'> 我注意到jsonData的类型是<class 'SPARQLWrapper.Wrapper.QueryResult'>

SPARQL查询是否不返回JSON? 我还需要进行其他转换吗?

字符串前面的b表示您的字符串不是字符串,而是字节字符串,并且您的字节被解释为打印字符。 在这里查看更多信息

如果您告诉我们更多有关您的问题的信息,那么下一次会更加容易。 您正在使用哪个库,哪个版本,示例查询等。

在您的情况下,我假设您正在使用SPARQLWrapper库。 您非常接近解决问题,只需要转换QueryResult。 只需调用jsonData = sparql.query().convert()而不是jsonData = sparql.query() ,您将获得可以用json.dump写入json文件的json.dump

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM