2013-08-28 13 views
6

Ich habe eine Bson formatierte Zeichenfolge in DateiParse Bson Zeichenfolge in Python?

Ich möchte diese Datei lesen und den codierten JSON erhalten.

Ich war auf der Suche in dem Beispiel hier:

>>> 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'} 

von http://docs.mongodb.org/meta-driver/latest/legacy/bson/

Aber was ich habe ist, sagen:

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

Und jetzt möchte ich diese json analysieren? Wie mache ich das? Dank


Können Sie versuchen, diese BSON formatiert Zeichenfolge zu analysieren:

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'""" 

So ist es das, was ich getan habe: geben ein 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 }""" 

nun geladen diese Zeichenfolge

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 
""" 

und dafür, wenn ich .. versuchen, wirft es einen Fehler :(

Ein weiterer String, wo ich einen Fehler haben:

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

Antwort

6

Sie können dies tun, um eine BSON Instanz mit einer Zeichenfolge zu initialisieren:

>>> 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

Hallo .. Können Sie versuchen, die Zeichenfolge in der bearbeiteten Frage zu analysieren? – Fraz

+1

Es gibt mir einen Fehler, "objsize zu groß". Ich weiß nicht, ob das wirklich der Fall ist oder nur schlecht gemacht. –

+0

Hi ... kannst du dir den aktualisierten Teil meiner Anfrage ansehen ??? – Fraz