簡體   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