我正在使用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?我还需要进行其他一些转换吗?
答案 0 :(得分:2)
字符串前面的b表示您的字符串不是字符串,而是字节字符串,并且您的字节被解释为打印字符。 Look here for more information
下一次,如果您将更多的问题告诉我们,将会更加轻松。您正在使用哪个库,哪个版本,示例查询等。
在您的情况下,我假设您正在使用SPARQLWrapper库。您非常接近解决问题,只需要转换QueryResult。只需调用jsonData = sparql.query().convert()
而不是jsonData = sparql.query()
,您将获得可以用json.dump
写入json文件的字典。