it-swarm-tr.com

JSON'u Python'da ayrıştırmaya çalışıyor. ValueError: Özellik adı bekleniyor

Bir JSON nesnesini Python dict içine ayrıştırmaya çalışıyorum. Bunu daha önce hiç yapmadım. Bu özel hatayı googledince, (İlk karakterin nesi var?), Diğer yayınlar yüklenen dizinin aslında JSON dizisi olmadığını söyledi. Öyle olduğuna eminim.

Bu durumda, eval() düzgün çalışıyor, ama daha uygun bir yol olup olmadığını merak ediyorum?

Not: Bu dize ptt araçlarıyla doğrudan Twitter'dan gelir.

>>> import json
>>> line = '{u\'follow_request_sent\': False, u\'profile_use_background_image\': True,
         u\'default_profile_image\': False, 
         u\'verified\': False, u\'profile_sidebar_fill_color\': u\'DDEEF6\',
         u\'profile_text_color\': u\'333333\', u\'listed_count\': 0}'
>>> json.loads(line)

Traceback (most recent call last):
     File "<stdin>", line 1, in <module>
     File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/__init__.py", line 326, in loads
       return _default_decoder.decode(s)
     File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.py", line 366, in decode
       obj, end = self.raw_decode(s, idx=_w(s, 0).end())
     File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.py", line 382, in raw_decode
       obj, end = self.scan_once(s, idx)
   ValueError: Expecting property name: line 1 column 1 (char 1)
26
gabe

Bu kesinlikle JSON değil - her nasılsa yukarıda yazılı değil. Bir Python nesnesine zaten ayrıştırıldı - JSON false olurdu, False değil ve unicode için u olarak dizeleri göstermezdi (tüm JSON dizeleri unicode'dur). Json dizenizi bir Python nesnesine zincirin herhangi bir yerinde ücretsiz olarak almadığınızdan ve bu nedenle json.loads () dizinine yüklemediğinizden emin misiniz, çünkü aslında bir dize değil mi?

28
Nick Bastin

Bazen bu hatayı alabilirsiniz, çünkü string değerleriniz python tarafından iyi tanınmıyor. Örnek olarak: Bu tür bir hatanın Kökeni'ni aramak için çok zaman harcadım. İşte ne buldum. 

Bazen bir dil başka bir alıntı değil bir tür alıntıyı tanır: JavaScript.

bir dizgeyi JavaScript'te json'a dönüştürmek için tüm alıntıların "mantıklı olmayan" biçimde olması gerekir.

Umarım değiştirme işlevini kullanabilirsiniz. Python için:

json.loads(s.replace("\'", '"'));

Umarım bu hatayı avlamak için harcadığım zamanı koruyacaktır! 

27
gronaz

Özellikler listesinin sonunda bir virgül takarken bu hatayı aldım. Virgül nedeniyle başka bir özellik adı bekliyordu ama hiçbiri yoktu. 

7
Ian Danforth

JSON dosyanızda // ile başlayan bir satır olmadığından emin olun (ki bu yanlış yorumlarda! Aynı ValueError mesajı var ve // dosyasını dosyamdan çıkardıktan sonra geçti.

0
Aziz Alto