python
  • json
  • 2016-10-10 2 views 2 likes 
    2

    Postman에서이 POST 요청을하면 데이터를 얻습니다. 파이썬 2.7 (Jupyter 노트북 사용)에서이 작업을 수행 할 때 "No JSON object decode"오류가 발생합니다. 내가 뭘 잘못하고 어떻게 작동시킬 수 있니?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()) 
    

    API에 대한 설명서는 여기에있다,하지만별로 도움이되지 않습니다 :

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

    +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를 사용하여이) : 오류로 인코딩을 설정 UTF-8-SIG :

    r = requests.post(url, json=payload) 
    r.encoding = "utf-8-sig" 
    print(r.json()) 
    
    +0

    감사합니다. – Celebrian

    관련 문제