Saya akan menerima bentuk string JSON yang dikodekan Obj-C, dan saya mendekode string dummy (untuk saat ini) seperti kode di bawah ini. Output saya keluar dengan karakter 'u' mengawali setiap item:
[{u'i': u'imap.gmail.com', u'p': u'aaaa'}, {u'i': u'333imap.com', u'p': u'bbbb'}...
Bagaimana JSON menambahkan char unicode ini? Apa cara terbaik untuk menghapusnya?
mail_accounts = []
da = {}
try:
s = '[{"i":"imap.gmail.com","p":"aaaa"},{"i":"imap.aol.com","p":"bbbb"},{"i":"333imap.com","p":"ccccc"},{"i":"444ap.gmail.com","p":"ddddd"},{"i":"555imap.gmail.com","p":"eee"}]'
jdata = json.loads(s)
for d in jdata:
for key, value in d.iteritems():
if key not in da:
da[key] = value
else:
da = {}
da[key] = value
mail_accounts.append(da)
except Exception, err:
sys.stderr.write('Exception Error: %s' % str(err))
print mail_accounts
Jawaban:
Awalan u- artinya Anda memiliki string Unicode. Ketika Anda benar-benar menggunakan string, itu tidak akan muncul di data Anda. Jangan terlempar oleh hasil cetak.
Misalnya, coba ini:
Anda tidak akan melihat Anda.
sumber
u
data Anda. Terus terang, mencetaku
untuk menunjukkan itu adalah string Unicode adalah salah satu kesalahan terburuk tentang Python. Benar-benar konyol. Mengapa tidak mencetaka
sebelum setiap string jika itu ASCII? Sebuahi
jika itu sebuah integer?Semuanya keren, bung. The 'u' adalah hal yang baik, ini menunjukkan bahwa string bertipe Unicode di python 2.x.
http://docs.python.org/2/howto/unicode.html#the-unicode-type
sumber
The
d3
cetak di bawah ini adalah salah satu yang Anda cari (yang merupakan kombinasi dari kesedihan dan beban) :)Memiliki:
Cetakan:
sumber
json.dumps
mengkonversi dict kembali ke string (JSON-encoded). Bukan itu yang ingin dilakukan OP. -1.The
u
awalan berarti bahwa mereka string unicode daripada 8-bit string. Cara terbaik untuk tidak menampilkanu
awalan adalah beralih ke Python 3, di mana string adalah unicode secara default. Jika itu bukan opsi,str
konstruktor akan mengkonversi dari unicode ke 8-bit, jadi cukup loop rekursif atas hasilnya dan dikonversiunicode
kestr
. Namun, mungkin yang terbaik adalah membiarkan string sebagai unicode.sumber
Unicode adalah tipe yang tepat di sini. Dokumen JSONDecoder menjelaskan tabel konversi dan menyatakan bahwa objek string json didekodekan menjadi objek Unicode
https://docs.python.org/2/library/json.html#encoders-and-decoders
"Pengkodean menentukan pengodean yang digunakan untuk menginterpretasikan objek str yang didekode oleh instance ini (secara default UTF-8)."
sumber
Karakter 'u' yang ditambahkan ke objek menandakan bahwa objek dikodekan dalam "unicode".
Jika Anda ingin menghapus karakter 'u' dari objek Anda, Anda dapat melakukan ini:
Mari kita checkout dari shell python
sumber
Saya terus mengalami masalah ini ketika mencoba untuk menangkap data JSON dalam log dengan
logging
pustaka Python , untuk keperluan debugging dan troubleshooting. Mendapatkanu
karakter adalah gangguan nyata ketika Anda ingin menyalin teks dan menempelkannya ke kode Anda di suatu tempat.Seperti yang semua orang akan katakan kepada Anda, ini karena itu adalah representasi Unicode, dan itu bisa berasal dari fakta bahwa Anda sudah terbiasa
json.loads()
memuat data dari string di tempat pertama.Jika Anda ingin representasi JSON di log, tanpa
u
awalan, triknya adalah menggunakanjson.dumps()
sebelum logout . Sebagai contoh:sumber
Coba ini:
mail_accounts [0] .encode ("ascii")
sumber
Cukup ganti u 'dengan satu kutipan ...
sumber