У меня есть ситуация, когда я могу только прочитать файл 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.