2013-08-28 20 views
6

Ben bu dosyayı okumak ve kodlanmış json almak istiyorum Python'da bson dizgisi ayrıştırılıyor mu?

dosyasında

bir BSON biçimlendirilmiş dize var.

Burada örnek içine bakıyordu:

>>> from bson import BSON 
>>> bson_string = BSON.encode({"hello": "world"}) 
>>> bson_string 
'\x16\x00\x00\x00\x02hello\x00\x06\x00\x00\x00world\x00\x00' 
>>> bson_string.decode() 
{u'hello': u'world'} 

http://docs.mongodb.org/meta-driver/latest/legacy/bson/ itibaren Ama ne ben söylüyorlar geçerli:

string = '\x16\x00\x00\x00\x02hello\x00\x06\x00\x00\x00world\x00\x00' 

Ve şimdi bu json ayrıştırmak istiyor? Bunu nasıl yaparım? Teşekkür


bu BSON biçimlendirilmiş dize ayrıştırmak deneyebilir miyim:

s = """'\x93\x01\x00\x00\x02_id\x00\x1a\x00\x00\x00auromotiveengineering.com\x00\x04name_servers\x00_\x00\x00\x00\x020\x00\x17\x00\x00\x00ns-2.activatedhost.com\x00\x021\x00\x17\x00\x00\x00ns-1.activatedhost.com\x00\x022\x00\x17\x00\x00\x00ns-3.activatedhost.com\x00\x00\nreputation\x00\x04categories\x00\x05\x00\x00\x00\x00\x03host_act\x00\xd7\x00\x00\x00\x03bnMtMi5hY3RpdmF0ZWRob3N0LmNvbQ==\x00$\x00\x00\x00\x10seen_first\x00\x00,\xe7F\x10seen_last\x00\x80 \xebF\x00\x03bnMtMy5hY3RpdmF0ZWRob3N0LmNvbQ==\x00$\x00\x00\x00\x10seen_first\x00\x00,\xe7F\x10seen_last\x00\x80 \xebF\x00\x03bnMtMS5hY3RpdmF0ZWRob3N0LmNvbQ==\x00$\x00\x00\x00\x10seen_first\x00\x00,\xe7F\x10seen_last\x00\x80 \xebF\x00\x00\x00'""" 

Yani bu ne yaptım: Şimdi jsonstring

s = """'{ "_id" : "auromotiveengineering.com", "categories" : [ ], "host_act" : { "bnMtMi5hY3RpdmF0ZWRob3N0LmNvbQ==" : { "seen_first" : 1189555200, "seen_last" : 1189814400 }, "bnMtMS5hY3RpdmF0ZWRob3N0LmNvbQ==" : { "seen_first" : 1189555200, "seen_last" : 1189814400 }, "bnMtMy5hY3RpdmF0ZWRob3N0LmNvbQ==" : { "seen_first" : 1189555200, "seen_last" : 1189814400 } }, "name_servers" : [ \t"ns-2.activatedhost.com", \t"ns-1.activatedhost.com", \t"ns-3.activatedhost.com" ], "reputation" : null }""" 

vermek, bu dizeyi yüklenen

jsn = json.loads(s) 

bson_string = BSON.encode(jsn) 

And then i copy paste bson_string 

so bson_string = """'\x93\x01\x00\x00\x02_id\x00\x1a\x00\x00\x00auromotiveengineering.com\x00\x04name_servers\x00_\x00\x00\x00\x020\x00\x17\x00\x00\x00ns-2.activatedhost.com\x00\x021\x00\x17\x00\x00\x00ns-1.activatedhost.com\x00\x022\x00\x17\x00\x00\x00ns-3.activatedhost.com\x00\x00\nreputation\x00\x04categories\x00\x05\x00\x00\x00\x00\x03host_act\x00\xd7\x00\x00\x00\x03bnMtMi5hY3RpdmF0ZWRob3N0LmNvbQ==\x00$\x00\x00\x00\x10seen_first\x00\x00,\xe7F\x10seen_last\x00\x80 \xebF\x00\x03bnMtMy5hY3RpdmF0ZWRob3N0LmNvbQ==\x00$\x00\x00\x00\x10seen_first\x00\x00,\xe7F\x10seen_last\x00\x80 \xebF\x00\x03bnMtMS5hY3RpdmF0ZWRob3N0LmNvbQ==\x00$\x00\x00\x00\x10seen_first\x00\x00,\xe7F\x10seen_last\x00\x80 \xebF\x00\x00\x00 
""" 
i denediğinizde

ve bunun için.. o bir hata :(atar

i bir hata var başka dizesi:

._idbrusselscityreporter.comcategorieshost_act�bnMzMC5kb21haW5jb250cm9sLmNvbQ==$seen_first�hLseen_last��NbnMyOS5kb21haW5jb250cm9sLmNvbQ==$seen_first�hLseen_last��Nname_serversA0ns30.domaincontrol.com1ns29.domaincontrol.com 

cevap

6

Bir dize ile bir BSON örneğini başlatmak için bunu yapabilirsiniz:

>>> s = '\x16\x00\x00\x00\x02hello\x00\x06\x00\x00\x00world\x00\x00' 
>>> bson_obj = BSON(s) 
>>> bson_obj.decode() 
{u'hello': u'world'} 
+0

Merhaba .. Düzenlenen sorudaki dizeyi ayrıştırmayı deneyebilir misiniz? – Fraz

+1

Bana bir hata veriyor, 'çok büyük itiraz'. Bu gerçekten ya da sadece yanlış biçimlendirilmiş mi bilmiyorum. –

+0

Merhaba ... Sorgunun güncellenmiş bölümüne bir göz atabilir misiniz ??? – Fraz