Ben ne kadar tembel Python dosyasını/akışı birden fazla JSON nesneleri okuyabilir miyim?
Python dosyasını/akışı birden fazla JSON nesneleri okumak, bir seferde bir tane istiyorum. Ne yazık ki json.load() .read()dosya sonu gelene kadar s; tek bir nesne okuma ya da tembel nesneler üzerinde yineleme için kullanmak için herhangi bir yolu var gibi görünmüyor.
Bunu yapmak için herhangi bir yolu var mı? Standart kütüphaneyi kullanmak ideal olacaktır, ama eğer üçüncü parti bir kütüphane varsa, bunun yerine kullanmak istiyorum.
Şu an ayrı bir hat üzerinde her nesne koyarak ve json.loads(f.readline()) kullanıyorum ama bunu yapmak zorunda değil tercih ederim.
Örnek Kullanın
example.py
import my_json as json
import sys
for o in json.iterload(sys.stdin):
print("Working on a", type(o))
in.txt
{"foo": ["bar", "baz"]} 1 2 [] 4 5 6
örnek oturum
$ python3.2 example.py < in.txt
Working on a dict
Working on a int
Working on a int
Working on a list
Working on a int
Working on a int
Working on a int
CEVAP
JSON genellikle artan kullanımı bu tür için çok iyi değil, kolay bir sürü ayrıştırma olmadan bir kerede yüklü olabilir, böylece birden çok nesne serialise için standart bir yolu yok.
Kullandığınız hat başına çözüm nesneyi başka yerlerde de görülür. Scrapy çağrıları 'JSON hatları':
- http://doc.scrapy.org/topics/exporters.html#jsonlinesitemexporter
- http://www.enricozini.org/2011/tips/python-stream-json/
Biraz daha Pythonically yapabilirsiniz:
for jsonline in f:
yield json.loads(jsonline) # or do the processing in this loop
Bu en iyi yolu, herhangi bir üçüncü parti kütüphaneler almaz olduğunu düşünüyorum, ve kolay ne olduğunu anlamak için. Ben kendi kod bazı olarak kullandım.

Nasıl açık birden fazla dosya "Py...
Ne kadar çok baskı JSON miyim?...
Nasıl birden fazla sınıflar ile bir öğ...
Ne kadar çok baskı JavaScript kullanar...
Ne kadar etkili Vim birden fazla dosya...