Конвертировать Bson в Json in python - PullRequest
0 голосов
/ 03 марта 2020

У меня есть ситуация, когда я могу только прочитать файл BSON как байты (это Apache Кодировщик байтов луча). Поэтому я получаю содержимое файла BSON в байтах. Сейчас я пытаюсь преобразовать его в JSON. Мой код:

from bson import json_util
import apache_beam as beam

class ParseBsontoJson(beam.DoFn):
    def process(self, element):
        print(type(element))
        # data = bson.BSON.decode(bson.BSON(element))
        data = element.decode('utf-8')
        # data = bson.decode_all(element)
        # data2 = json_util.dumps(data)
        # print(type(data))
        return [data]

p = beam.Pipeline(options=pipeline_options)

# This gives me Pcollection of bytes (elements)
test = (p | 'test_r' >> beam.io.ReadFromText(known_args.input + '/' + 'test.bson', coder=coders.BytesCoder()
| 'test_parse' >> beam.ParDo(ParseBsontoJson())) - here I have problem

data = element.decode('latin-1').encode("utf-8")
data2 = json_util.dumps(data)
print(data2)

Где element - строка в файле BSON.

Что я получаю:

{
    "$binary": "w5MBAAAHX2lkAF5cw5/Dvj3Cu3FsIcKMOsO+Am5hbWUABgAAAHNjZW5lAAdhY2NvdW50SWQAXlzDn8OKw6B1OEp4TcKmXQdkYXRhQ2VudGVyAF5cw5/DizpiwrIWY8KLw5EIB3RzaGlydFNpemUAXlzDn8OLPcK7cWwhwow6Sgdvc0ltYWdlAF5cw5/Diz3Cu3FsIcKMOksHcHJvdmlzaW9uZWRCeVdvcmtPcmRlcgBeXMOfw5Q9wrtxbCHCjDpcB3BoeXNpY2FsU2VydmVyTm9kZQBeXMOfw5U9wrtxbCHCjDpmBGJvbmRzAHoAAAADMAByAAAAEGluZGV4AAAAAAAEbmljcwAoAAAAAzAAIAAAAAJtYWMAEgAAADhjOmZkOjFiOjAwOjlmOjk5AAAAB25ldHdvcmsAXlzDn8OmOmLCshZjwovDkTwCaXB2NEFkZHJlc3MADgAAADM4LjEzMy4xNjQuNjAAAAAEbHVucwAUAAAABzAAXlzDn8O+PcK7cWwhwow6w70AAnN0YXR1cwAOAAAAZGVwcm92aXNpb25lZAAJX3VwZGF0ZWQAMMO4w4rCmnABAAAJX2NyZWF0ZWQAMMO4w4rCmnABAAACX2V0YWcAKQAAAGMxN2QyZGNjOGU2ZGQ3ZGQ1NGI1ZGQzMjVlYjkzMDcyZTE2NWVmZjEAAMK5AgAAB19pZABeXMOgCTpiwrIWY8KLw5HCsQJuYW1lAAUAAABhd2F5AAdhY2NvdW50SWQAXlzDn8OKOmLCshZjwovDkQMHZGF0YUNlbnRlcgBeXMOfw4s6YsKyFmPCi8ORCQd0c2hpcnRTaXplAF5cw5/DjDpiwrIWY8KLw5E=",
    "$type": "00"
}

Я попробовал другие рекомендации, например, для пример из похожих ответов StackOverflow:

bson.decode_all(element)

или

# This give an exception: InvalidBSONbad eoo
data = bson.BSON.decode(bson.BSON(element))

Но он не преобразуется в JSON представление.

element.decode('latin-1') 

дает

"b²cÓ:nameimpactaccountId^\à=»ql!<RdataCenter^\à=»ql!<UtshirtSize^\à:b²cÒÞosImage^\à:b²cÒßprovisionedByWorkOrder^\à:b²cÒäphysicalServerNode^\à=»ql!<]bonds|0tindexnics(0 mac5d:b1:d1:82:d5:99network^"

Не могли бы вы мне помочь? Я не могу найти в inte rnet, как я могу это сделать. Все мои попытки получают исключения.

Я использую Python 3.7.

...