[英]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.