Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Раскодировать BSON в JSON (https://javascript.ru/forum/misc/72951-raskodirovat-bson-v-json.html)

grigandal 09.03.2018 19:19

Раскодировать BSON в JSON
 
Есть строка в формате BSON (закодированная в base64), как раскодировать ее в JSON-строку?

Строка в таком виде

Код:

ugEAAAMwAGsAAAACX2lkAAsAAAAxNUdaczF4UWt3AAJVc2VyQnVpbGQAJQAAADRlMTI3VzEwN3M2N1MxYjc4ZjEwM1U5MHkzN3cxMDBlMTE5ZwAIVXNlckZ1bGxBY2Nlc3MAAQhVc2VyQ2FuQWRkAAAAAzEAagAAAAJfaWQACwAAADV2QlV2ZWdsVm4AAlVzZXJCdWlsZAAkAAAANzF6MTIySjEwM1Y2OFI4MmU4M2o4NWI5OHE2MG45Nms1MloACFVzZXJGdWxsQWNjZXNzAAAIVXNlckNhbkFkZAAAAAMyAGoAAAACX2lkAAsAAAAwWk81anpwb3MzAAhVc2VyRnVsbEFjY2VzcwABAlVzZXJCdWlsZAAkAAAAMTA3TTEyMEwxUDg4WjY3czczQTk0ZDcwRTk3ajEwMWsyNEUACFVzZXJDYW5BZGQAAAADMwBqAAAAAl9pZAALAAAAb0prbDhyZk9GbwACVXNlckJ1aWxkACQAAAAxMjNXODNkOTRpMTRPNjVMOTRFMTI1VTExM3Y2MXU1OFQ4VQAIVXNlckZ1bGxBY2Nlc3MAAQhVc2VyQ2FuQWRkAAAAAA==
В документации сказано, что это:

Код:

bson результат запроса, закодированный в base64
Как это раскодировать в JSON?

(Вопрос подобен этому, тут все работает, но это для Delphi)

Пробовал раскодировать base64 с помощью WindowBase64 функции atob()

Результат такой (из-за непечатных символов пришлось картинкой):

Код:

var str = ("ugEAAAMwAGsAAAACX2lkAAsAAAAxNUdaczF4UWt3AAJVc2VyQnVpbGQAJQAAADRlMTI3VzEwN3M2N1MxYjc4ZjEwM1U5MHkzN3cxMDBlMTE5ZwAIVXNlckZ1bGxBY2Nlc3MAAQhVc2VyQ2FuQWRkAAAAAzEAagAAAAJfaWQACwAAADV2QlV2ZWdsVm4AAlVzZXJCdWlsZAAkAAAANzF6MTIySjEwM1Y2OFI4MmU4M2o4NWI5OHE2MG45Nms1MloACFVzZXJGdWxsQWNjZXNzAAAIVXNlckNhbkFkZAAAAAMyAGoAAAACX2lkAAsAAAAwWk81anpwb3MzAAhVc2VyRnVsbEFjY2VzcwABAlVzZXJCdWlsZAAkAAAAMTA3TTEyMEwxUDg4WjY3czczQTk0ZDcwRTk3ajEwMWsyNEUACFVzZXJDYW5BZGQAAAADMwBqAAAAAl9pZAALAAAAb0prbDhyZk9GbwACVXNlckJ1aWxkACQAAAAxMjNXODNkOTRpMTRPNjVMOTRFMTI1VTExM3Y2MXU1OFQ4VQAIVXNlckZ1bGxBY2Nlc3MAAQhVc2VyQ2FuQWRkAAAAAA==");

console.log(atob(str));



Нужные параметры, типа _id или userBuild для составления JSON объекта тут есть

Но все-же JSON из такой строки не спарсишь


Что можно сделать?

P.S. Строка - ответ на запрос к HTTP API Scorocode

Alexandroppolus 09.03.2018 20:01

https://github.com/mongodb/js-bson

grigandal 09.03.2018 20:07

Alexandroppolus,
Это браузерный вариант?
Можете пример привести, пожалуйста

MallSerg 09.03.2018 21:08

Похоже в строке изначально мусор иначе atob адекватно работал бы.
пробуй писать в саппорт или на форуме разработчика.

grigandal 09.03.2018 21:18

Вот это помогло

Этот файл + функция
function myFunction(str) {
    var BSON = bson().BSON;

	// Decode Base64 into bytes
	var rawBytes = window.atob(str);
	
	// Typed Array (Uint8Array) for deserialize call
	var uintArray = new Uint8Array(rawBytes.length);
	
	// Fill Uint8Array from raw bytes
	for (var i = 0; i < rawBytes.length; i++)
	{
		uintArray[i] = rawBytes.charCodeAt(i);
	}
	
    // Deserialize it
    var doc_2 = BSON.deserialize(uintArray);
	
	return JSON.stringify(doc_2, null, 4);
  }

grigandal 09.03.2018 21:44

MallSerg,
Нет, тут все верно, решение нашел


Часовой пояс GMT +3, время: 10:25.