Jadi saya telah menghabiskan banyak waktu untuk ini, dan bagi saya sepertinya ini hanya perbaikan sederhana. Saya mencoba menggunakan Autentikasi Facebook untuk mendaftarkan pengguna di situs saya, dan saya mencoba melakukannya di sisi server. Saya sudah sampai pada titik di mana saya mendapatkan token akses saya, dan ketika saya pergi ke:
https://graph.facebook.com/me?access_token=MY_ACCESS_TOKEN
Saya mendapatkan informasi yang saya cari sebagai string seperti ini:
{"id":"123456789","name":"John Doe","first_name":"John","last_name":"Doe","link":"http:\/\/www.facebook.com\/jdoe","gender":"male","email":"jdoe\u0040gmail.com","timezone":-7,"locale":"en_US","verified":true,"updated_time":"2011-01-12T02:43:35+0000"}
Sepertinya saya hanya bisa menggunakan dict(string)
ini tetapi saya mendapatkan kesalahan ini:
ValueError: dictionary update sequence element #0 has length 1; 2 is required
Jadi saya mencoba menggunakan Pickle, tetapi mendapatkan kesalahan ini:
KeyError: '{'
Saya mencoba menggunakan django.serializers
untuk membatalkan serialnya tetapi memiliki hasil yang serupa. Ada pemikiran? Saya merasa jawabannya harus sederhana, dan saya hanya bersikap bodoh. Terima kasih atas bantuannya!
"verified":true
gagal kecualitrue
ditentukan. Atau Anda bisa menggunakan"verified":True
, atau"verified":"true"
.ast.literal_eval()
. Jawaban Anda (yang telah direvisi) benar - deserializer JSON adalah solusi yang lebih baik.Jawaban:
Data ini adalah JSON ! Anda dapat deserialisasi menggunakan
json
modul bawaan jika Anda menggunakan Python 2.6+, jika tidak, Anda dapat menggunakansimplejson
modul pihak ketiga yang sangat baik .sumber
u
di depan contoh string JSON Anda?decode()
-ing itu akan menghasilkanunicode
string - yang saya gunakan dalam contoh saya. Juga, halaman ini menyebutkan JSON selalu dalam Unicode (cari istilahnya, kira-kira setengah jalan)unicode
adalah jenis Python, yang berisi string Unicode (kata benda yang tepat untuk big-U). Saya juga setuju bahwa Unicode sama sekali bukan pengkodean, jadi mungkin saya seharusnya tidak menunjuk ke halaman itu sebagai referensi. Tidak ada alasan untuk menghindari meneruskanunicode
string kejson.loads
, meskipun - dokumen dengan jelas menyatakan bahwa ini sangat dapat diterima, dan saya suka menggunakan string yang telah didekodekan sebelumnya karena lebih eksplisit.json.loads()
jangan mengharapkanstr
objek yang dikodekan dalam ASCII - ia mengharapkanstr
objek yang dikodekan dalam UTF-8 atauunicode
objek (ataustr
objek plus pengkodean eksplisit)Gunakan ast.literal_eval untuk mengevaluasi literal Python. Namun, yang Anda miliki adalah JSON (misalnya catatan "benar"), jadi gunakan deserializer JSON.
sumber