Как преобразовать Json-значение параметра Http Post в Python Dict в Django? - PullRequest
2 голосов
/ 20 сентября 2011

Я использую Django для получения и обработки push-уведомлений из API-интерфейса Foursquare в реальном времени. Каждая регистрация передается как POST-запрос на мой сервер, содержащий один параметр с именем checkin. Я пытаюсь получить значение параметра checkin и преобразовать его в python dict. Однако вызов json.loads всегда приводит к следующей ошибке:

NameError: name 'true' is not defined

Я знаю, что JSON действителен, поэтому я, должно быть, делаю что-то не так.

Код:

import json    
def push(request):
  if request.is_secure():
    checkin_json = request.POST['checkin']
    checkin = json.load(request.POST)

Тело почтового запроса:

"checkin = 
{
"id": "4e6fe1404b90c00032eeac34",
"createdAt": 1315955008,
"type": "checkin",
"timeZone": "America/New_York",
"user": {
    "id": "1",
    "firstName": "Jimmy",
    "lastName": "Foursquare",
    "photo": "https://foursquare.com/img/blank_boy.png",
    "gender": "male",
    "homeCity": "New York, NY",
    "relationship": "self"
},
"venue": {
    "id": "4ab7e57cf964a5205f7b20e3",
    "name": "foursquare HQ",
    "contact": {
        "twitter": "foursquare"
    },
    "location": {
        "address": "East Village",
        "lat": 40.72809214560253,
        "lng": -73.99112284183502,
        "city": "New York",
        "state": "NY",
        "postalCode": "10003",
        "country": "USA"
    },
    "categories": [
        {
            "id": "4bf58dd8d48988d125941735",
            "name": "Tech Startup",
            "pluralName": "Tech Startups",
            "shortName": "Tech Startup",
            "icon": "https://foursquare.com/img/categories/building/default.png",
            "parents": [
                "Professional & Other Places",
                "Offices"
            ],
            "primary": true
        }
    ],
    "verified": true,
    "stats": {
        "checkinsCount": 7313,
        "usersCount": 565,
        "tipCount": 128
    },
    "url": "http://foursquare.com"
}
}"

Ответы [ 3 ]

4 голосов
/ 20 сентября 2011

Попробуйте json.loads(checkin_json) вместо json.load(request.POST).Обратите внимание на дополнительные 's'.

0 голосов
/ 20 сентября 2011

На python логические значения имеют заглавные буквы (первая буква заглавная): True / False.

Проверьте это.

EDIT: Обратите внимание на следующие строки:

"primary": true
    }
],
"verified": true,

Оба "истинных" значения являются строчными и должны быть написаны заглавными буквами

0 голосов
/ 20 сентября 2011

изменить checkin = json.load(request.POST) на checkin = json.loads(checkin_json)

...