2016-07-30 2 views
1

поэтому, когда я запускаю код python, сервер (google) дает мне другой ответ, чем когда я запускаю команду curl. Может ли кто-нибудь сказать мне, где я ошибаюсь?Проблемы с python + json против curl

код:

import urllib2, simplejson 

def MapsWIFI(card): 
    req = urllib2.Request("https://www.googleapis.com/geolocation/v1/geolocate?key=AI...") 
    jWifi = """ 
{ 
"wifiAccessPoints": [ 
    { 
    "macAddress": "64:D1:A3:0A:11:65", 
    "channel": 6, 
    }, 
    ... #some AP here 
] 
} 
    """ 
    print jWifi 
    req.add_header("Content-Type", "application/json") 
    jWifiReport = urllib2.urlopen(req,simplejson.dumps(jWifi)).read() 
    print jWifiReport 
    APdetected = str(len(wifiCell)) 
    mapsDict = simplejson.loads(jWifiReport) 
    location = str(mapsDict.get("location",{}))[1:-1] 
    accuracy = "Accuracy: "+str(mapsDict.get("accuracy",{}))[1:-1] 
    mapMe = "|---"+location.split(",")[0]+"\n|---"+location.split(",")[1][1:]+"\n|---$ 
    return mapMe 

MapsWIFI("wlp8s0") 

И команда:

curl -d @file2.json -H "Content-Type: application/json" -i "https://www.googleapis.com/geolocation/v1/geolocate?key=AI..." 

где file2.json содержит ровно jWifi в этом формате. Проблема заключается в том, что, как сказано, местоположение, возвращаемое кодом, отличается от местоположения, возвращаемого curl. Я не получаю код ошибки, поэтому я уверен, что синтаксис верен.

+0

Из интереса, зачем использовать библиотеку 'simplejson'? Python 2.7 поставляется с модулем 'json', который представляет собой * тот же самый проект *. –

+0

Да, вы правы. Но это часть проекта, который должен быть максимально переносимым, поэтому это должно работать с другими версиями. – Pielco11

ответ

2

Данные уже закодированная строка JSON, вы не хотите кодировать ее дважды.

Pass его в без кодирующего его снова:

jWifiReport = urllib2.urlopen(req, jWifi).read() 

Вам только нужно кодировать, если у вас есть структура данных Python (словарь в данном случае).

Смежные вопросы