2017-02-16 52 views
2

以前的ConceptNet 5.4 API版本返回純文本JSON格式(http://conceptnet5.media.mit.edu/data/5.4/c/en/library)。ConceptNet 5.5和JSON格式

是否有人熟悉新的ConceptNet 5.5 API?爲什麼查詢返回html源文件而不是像以前版本(http://api.conceptnet.io/related/c/en/library)那樣的純文本?我沒有找到選擇純文本JSON格式的選項。


因此,此Java代碼不適用於新版本。

JsonReader jsonReader = Json.createReader(new URL("http://conceptnet5.media.mit.edu/data/5.4/c/en/library").openStream()); 

回答

1

API響應的格式取決於客戶端發送的Accept:標頭。 (當Django REST Framework執行此操作時,我發現這種行爲非常方便,所以我在ConceptNet的API代碼中實現了它。)默認的響應格式是JSON。

例如,如果您在命令行運行curl http://api.conceptnet.io/related/c/en/library,您將看到純正的無縮進JSON。如果你在Web瀏覽器中去那裏,它會縮進並用HTML包裝,因此可以用語法高亮顯示和鏈接。區別在於Web瀏覽器發送標頭Accept: text/html

我認爲這是您使用的JsonReader中的一個錯誤,它明確發送了Accept: text/html,但它期望得到一個JSON響應,而不是HTML。看看你是否可以通過配置它發送的頭文件來解決它。

(如果添加到HTML是不可避免的,注意,普通的JSON也存在於HTML中,<script type="application/ld+json">標籤內。)

+1

是的,你是對的。我通過創建'HttpURLConnection httpConnection =(HttpURLConnection)url.openConnection();來解決它。 httpConnection.setRequestMethod(「GET」); httpConnection.setRequestProperty(「Accept」,「application/json」);'。 – David

+0

可以請你分享一下你使用java獲取json-ld數據的java代碼 –