Skip to content

ewfian/pickleparser

Repository files navigation

Pickle Parser

NPM Version Unit Test Demo License

A pure Javascript implemented parser for Python pickle format

Features

  • Fully supports Pickle protocol version 0~5 opcodes.
  • Pure Typescript implemented.
  • Provides ParserOptions to customize Unpickling.
  • Supports Browser.
  • Supports Node.js.
  • Provides tool to convert pickle file to JSON.

Supported Protocol Version

For more details, see: Supported Opcodes

Demo

Online Pickle to JSON Convertor

Installation

$ npm install pickleparser

Usage

Node.js

import fs from 'node:fs/promises';
import path from 'node:path';
import { Parser } from 'pickleparser';

async function unpickle(fname: string) {
    const pkl = await fs.readFile(path.join(fname), 'binary');
    const buffer = Buffer.from(pkl, 'binary');
    const parser = new Parser();
    return parser.parse(buffer);
}

const obj = await unpickle('pickled.pkl');
console.log(obj);

Browser

const fileSelector = document.getElementById('file_selector');
const jsonResultPreviewer = document.getElementById('json_result_previewer');

fileSelector.addEventListener('change', function (e) {
    const file = fileSelector.files[0];
    const reader = new FileReader();

    reader.onload = function (event) {
        const buffer = new Uint8Array(event.target.result);
        const parser = new pickleparser.Parser();
        const obj = parser.parse(buffer);
        const json = JSON.stringify(obj, null, 4);
        jsonResultPreviewer.innerText = json;
    }

    reader.readAsArrayBuffer(file);
});

Terminal

npx pickleparser file.pkl file.json
# or
npm i pickleparser -g
pickletojson file.pkl file.json

License

MIT