2016-10-10 12 views
2

このPOST要求をPostmanで作成すると、データが取得されます。私がPython 2.7(Jupyterノートブックを使用)でそれを行うと、「JSONオブジェクトがデコードできない」というエラーが表示されます。私は間違って何をしていますか、どうすればそれを動作させることができますか? APIのPOST要求はPostmanで動作しますが、Pythonでは動作しません

import json 
import requests 
url = 'http://api.scb.se/OV0104/v1/doris/en/ssd/BE/BE0101/BE0101A/BefolkningNy' 

headers={'content-type': 'application/json'} 
payload = { 
"query": [ 
{  
"code": "ContentsCode", 
    "selection": {   
    "filter": "item",   
    "values": [   
     "BE0101N1"   
    ]  
    }  
},  
{  
    "code": "Tid", 
    "selection": {   
    "filter": "item",   
    "values": [   
    "2010",   
    "2011"   
    ]  
    }  
}, 
{  
    "code": "Region", 
    "selection": {   
    "filter": "item",   
    "values": [   
    "01"   
    ]  
    }  
} 
], 
"response": {  
    "format": "json" 
} 
} 
headers = {'Content-type': 'application/json', 'Accept': 'text/plain'} 

r = requests.post(url, data=payload) 
print(r.text) 
print(r.json()) 

マニュアルはここにあるが、それは多くの助けではありません。

http://www.scb.se/en_/About-us/Open-data-API/API-for-the-Statistical-Database-/

+2

ヘッダーを2回定義していて、これをリクエストに追加していません。 –

+0

@Jérôme、それらを追加することは何の違いもないので、私は彼らが試したことの例であると思います。 –

+0

@PadraicCunningham True。私はこのウェブサイトで多くのソリューションを試しました – Celebrian

答えて

4

設定json=payloadや要求は、必要なヘッダを追加します:

url = 'http://api.scb.se/OV0104/v1/doris/en/ssd/BE/BE0101/BE0101A/BefolkningNy' 
payload = .... 


r = requests.post(url, json=payload) 

ことあなたのjsonを与えるでしょう:

In [7]: 
    ...: r = requests.post(url, json=payload) 
    ...: print(r.json()) 
    ...: 
{u'data': [{u'values': [u'2054343'], u'key': [u'01', u'2010']}, {u'values': [u'2091473'], u'key': [u'01', u'2011']}], u'comments': [], u'columns': [{u'text': u'region', u'code': u'Region', u'type': u'd'}, {u'text': u'year', u'code': u'Tid', u'type': u't'}, {u'text': u'Population', u'code': u'BE0101N1', u'type': u'c'}]} 

あなたがjson.decoder.JSONDecodeErrorを得るために起こる場合:予期しないUTF-8 BOM(デコードUTF-8-SIGを使用して):

r = requests.post(url, json=payload) 
r.encoding = "utf-8-sig" 
print(r.json()) 
エラーが UTF-8-SIGにエンコーディングを設定します
+0

それは、感謝を働いた! – Celebrian

関連する問題