How to decompress jsonlz4 files (Firefox bookmark backups) using the command line?
There seems to be various JavaScript+browser specific ways of decompressing this, but isn't there some way to transform jsonlz4 files to something unlz4
will read?
firefox compression lz4
add a comment |
There seems to be various JavaScript+browser specific ways of decompressing this, but isn't there some way to transform jsonlz4 files to something unlz4
will read?
firefox compression lz4
Cross reference: Reading "jsonlz4" bookmarkbackup files • mozillaZine Forums (2014-11-04)
– Graham Perrin
Oct 19 '17 at 1:28
add a comment |
There seems to be various JavaScript+browser specific ways of decompressing this, but isn't there some way to transform jsonlz4 files to something unlz4
will read?
firefox compression lz4
There seems to be various JavaScript+browser specific ways of decompressing this, but isn't there some way to transform jsonlz4 files to something unlz4
will read?
firefox compression lz4
firefox compression lz4
asked Nov 29 '16 at 20:15
l0b0l0b0
28k17119246
28k17119246
Cross reference: Reading "jsonlz4" bookmarkbackup files • mozillaZine Forums (2014-11-04)
– Graham Perrin
Oct 19 '17 at 1:28
add a comment |
Cross reference: Reading "jsonlz4" bookmarkbackup files • mozillaZine Forums (2014-11-04)
– Graham Perrin
Oct 19 '17 at 1:28
Cross reference: Reading "jsonlz4" bookmarkbackup files • mozillaZine Forums (2014-11-04)
– Graham Perrin
Oct 19 '17 at 1:28
Cross reference: Reading "jsonlz4" bookmarkbackup files • mozillaZine Forums (2014-11-04)
– Graham Perrin
Oct 19 '17 at 1:28
add a comment |
4 Answers
4
active
oldest
votes
I was able to unpack the jsonlz4 by using lz4json
:
apt-get install liblz4-dev
git clone https://github.com/andikleen/lz4json.git
cd lz4json
make
./lz4jsoncat ~/.mozilla/firefox/*/bookmarkbackups/*.jsonlz4
The andikleen solution is also good for.json.mozlz4
files e.g. as shown at github.com/andikleen/lz4json/issues/1#issuecomment-336729026 (note to self: remember, remember,gmake
on FreeBSD …).
– Graham Perrin
Oct 15 '17 at 18:02
3
Also: bugzilla.mozilla.org/show_bug.cgi?id=1209390#c4 (2016-05-13) under Mozilla bug 1209390 - Use standard lz4 file format instead of the non-standard jsonlz4/mozlz4 draws attention to avih/dejsonlz4: Decompress Mozilla Firefox bookmarks backup files
– Graham Perrin
Oct 19 '17 at 1:40
1
FWIW, andikleen's tool failed to compile, with the error "undefined reference to LZ4_decompress_safe_partial" (I did installliblz4-dev
prior to building it). avih's tool, OTOH, worked perfectly for me.
– waldyrious
Nov 6 '17 at 17:48
Isn't it ironic that an open-web org is using a proprietary compression format for user's data, making it non-trivial to examine your own data?!
– cnst
May 8 '18 at 4:42
@Graham-Perrin : dejsonlz4 worked very well for me. It doesn't "transform jsonlz4 files to something unlz4 will read" as requested but directly decompresses them. It would be good to make it a real answer to make it more visible.
– mivk
Jun 18 '18 at 18:26
add a comment |
Save this script as e.g. mozlz4
:
#!/usr/bin/env python
from sys import *
import os
try:
import lz4.block as lz4
except ImportError:
import lz4
stdin = os.fdopen(stdin.fileno(), 'rb')
stdout = os.fdopen(stdout.fileno(), 'wb')
if argv[1:] == ['-c']:
stdout.write(b'mozLz40' + lz4.compress(stdin.read()))
elif argv[1:] == ['-d']:
assert stdin.read(8) == b'mozLz40'
stdout.write(lz4.decompress(stdin.read()))
else:
stderr.write('Usage: %s -c|-d <infile >outfilen' % argv[0])
stderr.write('Compress or decompress Mozilla-flavor LZ4 files.n')
exit(1)
Usage:
mozlz4 -d <previous.jsonlz4 >previous.json
mozlz4 -c <previous.json >previous.jsonlz4
I had to changeimport lz4
toimport lz4.block as lz4
, but it still didn't work. Some bytes vs string related error. OTOH this script worked with the import change: gist.github.com/Tblue/62ff47bef7f894e92ed5
– user31389
Apr 19 '18 at 11:45
1
@user31389: I updated the script. Does it work now?
– Håkon A. Hjortland
Apr 20 '18 at 21:44
add a comment |
Actually almost all Firefox profile lz4 files are mozlz4 files. It means they have the same "file format header".
Except one file. I talk about webext.sc.lz4 file. It has mozJSSCLz40v001
file header and maybe some sc
packaging to pack group of files to on byte stream.
There is a Firefox addon to read or compress .mozlz4 text files mozlz4-edit
add a comment |
Sufficiently persistent Googling for this turns up a lot of solutions, but most of them seem to be either (a) broken by subsequent changes to underlying libraries, or (b) unnecessarily complex (at least to my personal taste), making them clunky to drop into existing code.
The following appears to work at least on Python 2.7 and 3.6 using a recent version of the Python LZ4 bindings:
def mozlz4_to_text(filepath):
# Given the path to a "mozlz4", "jsonlz4", "baklz4" etc. file,
# return the uncompressed text.
import lz4.block
bytestream = open(filepath, "rb")
bytestream.read(8) # skip past the b"mozLz40" header
valid_bytes = bytestream.read()
text = lz4.block.decompress(valid_bytes)
return text
Of course this does not attempt to validate inputs (or outputs), is not intended to be secure, etc., but if one just wants to be able to parse one's own FF data, it gets the basic job done.
Command line version here, which could be saved in the relevant directory and invoked from the command line as:
chmod +x mozlz4.py
./mozlz4.py <file you want to read> <file to save output to>
New contributor
add a comment |
Your Answer
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "106"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f326897%2fhow-to-decompress-jsonlz4-files-firefox-bookmark-backups-using-the-command-lin%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
4 Answers
4
active
oldest
votes
4 Answers
4
active
oldest
votes
active
oldest
votes
active
oldest
votes
I was able to unpack the jsonlz4 by using lz4json
:
apt-get install liblz4-dev
git clone https://github.com/andikleen/lz4json.git
cd lz4json
make
./lz4jsoncat ~/.mozilla/firefox/*/bookmarkbackups/*.jsonlz4
The andikleen solution is also good for.json.mozlz4
files e.g. as shown at github.com/andikleen/lz4json/issues/1#issuecomment-336729026 (note to self: remember, remember,gmake
on FreeBSD …).
– Graham Perrin
Oct 15 '17 at 18:02
3
Also: bugzilla.mozilla.org/show_bug.cgi?id=1209390#c4 (2016-05-13) under Mozilla bug 1209390 - Use standard lz4 file format instead of the non-standard jsonlz4/mozlz4 draws attention to avih/dejsonlz4: Decompress Mozilla Firefox bookmarks backup files
– Graham Perrin
Oct 19 '17 at 1:40
1
FWIW, andikleen's tool failed to compile, with the error "undefined reference to LZ4_decompress_safe_partial" (I did installliblz4-dev
prior to building it). avih's tool, OTOH, worked perfectly for me.
– waldyrious
Nov 6 '17 at 17:48
Isn't it ironic that an open-web org is using a proprietary compression format for user's data, making it non-trivial to examine your own data?!
– cnst
May 8 '18 at 4:42
@Graham-Perrin : dejsonlz4 worked very well for me. It doesn't "transform jsonlz4 files to something unlz4 will read" as requested but directly decompresses them. It would be good to make it a real answer to make it more visible.
– mivk
Jun 18 '18 at 18:26
add a comment |
I was able to unpack the jsonlz4 by using lz4json
:
apt-get install liblz4-dev
git clone https://github.com/andikleen/lz4json.git
cd lz4json
make
./lz4jsoncat ~/.mozilla/firefox/*/bookmarkbackups/*.jsonlz4
The andikleen solution is also good for.json.mozlz4
files e.g. as shown at github.com/andikleen/lz4json/issues/1#issuecomment-336729026 (note to self: remember, remember,gmake
on FreeBSD …).
– Graham Perrin
Oct 15 '17 at 18:02
3
Also: bugzilla.mozilla.org/show_bug.cgi?id=1209390#c4 (2016-05-13) under Mozilla bug 1209390 - Use standard lz4 file format instead of the non-standard jsonlz4/mozlz4 draws attention to avih/dejsonlz4: Decompress Mozilla Firefox bookmarks backup files
– Graham Perrin
Oct 19 '17 at 1:40
1
FWIW, andikleen's tool failed to compile, with the error "undefined reference to LZ4_decompress_safe_partial" (I did installliblz4-dev
prior to building it). avih's tool, OTOH, worked perfectly for me.
– waldyrious
Nov 6 '17 at 17:48
Isn't it ironic that an open-web org is using a proprietary compression format for user's data, making it non-trivial to examine your own data?!
– cnst
May 8 '18 at 4:42
@Graham-Perrin : dejsonlz4 worked very well for me. It doesn't "transform jsonlz4 files to something unlz4 will read" as requested but directly decompresses them. It would be good to make it a real answer to make it more visible.
– mivk
Jun 18 '18 at 18:26
add a comment |
I was able to unpack the jsonlz4 by using lz4json
:
apt-get install liblz4-dev
git clone https://github.com/andikleen/lz4json.git
cd lz4json
make
./lz4jsoncat ~/.mozilla/firefox/*/bookmarkbackups/*.jsonlz4
I was able to unpack the jsonlz4 by using lz4json
:
apt-get install liblz4-dev
git clone https://github.com/andikleen/lz4json.git
cd lz4json
make
./lz4jsoncat ~/.mozilla/firefox/*/bookmarkbackups/*.jsonlz4
edited Jan 20 '17 at 22:28
l0b0
28k17119246
28k17119246
answered Jan 20 '17 at 13:19
RolfRolf
12613
12613
The andikleen solution is also good for.json.mozlz4
files e.g. as shown at github.com/andikleen/lz4json/issues/1#issuecomment-336729026 (note to self: remember, remember,gmake
on FreeBSD …).
– Graham Perrin
Oct 15 '17 at 18:02
3
Also: bugzilla.mozilla.org/show_bug.cgi?id=1209390#c4 (2016-05-13) under Mozilla bug 1209390 - Use standard lz4 file format instead of the non-standard jsonlz4/mozlz4 draws attention to avih/dejsonlz4: Decompress Mozilla Firefox bookmarks backup files
– Graham Perrin
Oct 19 '17 at 1:40
1
FWIW, andikleen's tool failed to compile, with the error "undefined reference to LZ4_decompress_safe_partial" (I did installliblz4-dev
prior to building it). avih's tool, OTOH, worked perfectly for me.
– waldyrious
Nov 6 '17 at 17:48
Isn't it ironic that an open-web org is using a proprietary compression format for user's data, making it non-trivial to examine your own data?!
– cnst
May 8 '18 at 4:42
@Graham-Perrin : dejsonlz4 worked very well for me. It doesn't "transform jsonlz4 files to something unlz4 will read" as requested but directly decompresses them. It would be good to make it a real answer to make it more visible.
– mivk
Jun 18 '18 at 18:26
add a comment |
The andikleen solution is also good for.json.mozlz4
files e.g. as shown at github.com/andikleen/lz4json/issues/1#issuecomment-336729026 (note to self: remember, remember,gmake
on FreeBSD …).
– Graham Perrin
Oct 15 '17 at 18:02
3
Also: bugzilla.mozilla.org/show_bug.cgi?id=1209390#c4 (2016-05-13) under Mozilla bug 1209390 - Use standard lz4 file format instead of the non-standard jsonlz4/mozlz4 draws attention to avih/dejsonlz4: Decompress Mozilla Firefox bookmarks backup files
– Graham Perrin
Oct 19 '17 at 1:40
1
FWIW, andikleen's tool failed to compile, with the error "undefined reference to LZ4_decompress_safe_partial" (I did installliblz4-dev
prior to building it). avih's tool, OTOH, worked perfectly for me.
– waldyrious
Nov 6 '17 at 17:48
Isn't it ironic that an open-web org is using a proprietary compression format for user's data, making it non-trivial to examine your own data?!
– cnst
May 8 '18 at 4:42
@Graham-Perrin : dejsonlz4 worked very well for me. It doesn't "transform jsonlz4 files to something unlz4 will read" as requested but directly decompresses them. It would be good to make it a real answer to make it more visible.
– mivk
Jun 18 '18 at 18:26
The andikleen solution is also good for
.json.mozlz4
files e.g. as shown at github.com/andikleen/lz4json/issues/1#issuecomment-336729026 (note to self: remember, remember, gmake
on FreeBSD …).– Graham Perrin
Oct 15 '17 at 18:02
The andikleen solution is also good for
.json.mozlz4
files e.g. as shown at github.com/andikleen/lz4json/issues/1#issuecomment-336729026 (note to self: remember, remember, gmake
on FreeBSD …).– Graham Perrin
Oct 15 '17 at 18:02
3
3
Also: bugzilla.mozilla.org/show_bug.cgi?id=1209390#c4 (2016-05-13) under Mozilla bug 1209390 - Use standard lz4 file format instead of the non-standard jsonlz4/mozlz4 draws attention to avih/dejsonlz4: Decompress Mozilla Firefox bookmarks backup files
– Graham Perrin
Oct 19 '17 at 1:40
Also: bugzilla.mozilla.org/show_bug.cgi?id=1209390#c4 (2016-05-13) under Mozilla bug 1209390 - Use standard lz4 file format instead of the non-standard jsonlz4/mozlz4 draws attention to avih/dejsonlz4: Decompress Mozilla Firefox bookmarks backup files
– Graham Perrin
Oct 19 '17 at 1:40
1
1
FWIW, andikleen's tool failed to compile, with the error "undefined reference to LZ4_decompress_safe_partial" (I did install
liblz4-dev
prior to building it). avih's tool, OTOH, worked perfectly for me.– waldyrious
Nov 6 '17 at 17:48
FWIW, andikleen's tool failed to compile, with the error "undefined reference to LZ4_decompress_safe_partial" (I did install
liblz4-dev
prior to building it). avih's tool, OTOH, worked perfectly for me.– waldyrious
Nov 6 '17 at 17:48
Isn't it ironic that an open-web org is using a proprietary compression format for user's data, making it non-trivial to examine your own data?!
– cnst
May 8 '18 at 4:42
Isn't it ironic that an open-web org is using a proprietary compression format for user's data, making it non-trivial to examine your own data?!
– cnst
May 8 '18 at 4:42
@Graham-Perrin : dejsonlz4 worked very well for me. It doesn't "transform jsonlz4 files to something unlz4 will read" as requested but directly decompresses them. It would be good to make it a real answer to make it more visible.
– mivk
Jun 18 '18 at 18:26
@Graham-Perrin : dejsonlz4 worked very well for me. It doesn't "transform jsonlz4 files to something unlz4 will read" as requested but directly decompresses them. It would be good to make it a real answer to make it more visible.
– mivk
Jun 18 '18 at 18:26
add a comment |
Save this script as e.g. mozlz4
:
#!/usr/bin/env python
from sys import *
import os
try:
import lz4.block as lz4
except ImportError:
import lz4
stdin = os.fdopen(stdin.fileno(), 'rb')
stdout = os.fdopen(stdout.fileno(), 'wb')
if argv[1:] == ['-c']:
stdout.write(b'mozLz40' + lz4.compress(stdin.read()))
elif argv[1:] == ['-d']:
assert stdin.read(8) == b'mozLz40'
stdout.write(lz4.decompress(stdin.read()))
else:
stderr.write('Usage: %s -c|-d <infile >outfilen' % argv[0])
stderr.write('Compress or decompress Mozilla-flavor LZ4 files.n')
exit(1)
Usage:
mozlz4 -d <previous.jsonlz4 >previous.json
mozlz4 -c <previous.json >previous.jsonlz4
I had to changeimport lz4
toimport lz4.block as lz4
, but it still didn't work. Some bytes vs string related error. OTOH this script worked with the import change: gist.github.com/Tblue/62ff47bef7f894e92ed5
– user31389
Apr 19 '18 at 11:45
1
@user31389: I updated the script. Does it work now?
– Håkon A. Hjortland
Apr 20 '18 at 21:44
add a comment |
Save this script as e.g. mozlz4
:
#!/usr/bin/env python
from sys import *
import os
try:
import lz4.block as lz4
except ImportError:
import lz4
stdin = os.fdopen(stdin.fileno(), 'rb')
stdout = os.fdopen(stdout.fileno(), 'wb')
if argv[1:] == ['-c']:
stdout.write(b'mozLz40' + lz4.compress(stdin.read()))
elif argv[1:] == ['-d']:
assert stdin.read(8) == b'mozLz40'
stdout.write(lz4.decompress(stdin.read()))
else:
stderr.write('Usage: %s -c|-d <infile >outfilen' % argv[0])
stderr.write('Compress or decompress Mozilla-flavor LZ4 files.n')
exit(1)
Usage:
mozlz4 -d <previous.jsonlz4 >previous.json
mozlz4 -c <previous.json >previous.jsonlz4
I had to changeimport lz4
toimport lz4.block as lz4
, but it still didn't work. Some bytes vs string related error. OTOH this script worked with the import change: gist.github.com/Tblue/62ff47bef7f894e92ed5
– user31389
Apr 19 '18 at 11:45
1
@user31389: I updated the script. Does it work now?
– Håkon A. Hjortland
Apr 20 '18 at 21:44
add a comment |
Save this script as e.g. mozlz4
:
#!/usr/bin/env python
from sys import *
import os
try:
import lz4.block as lz4
except ImportError:
import lz4
stdin = os.fdopen(stdin.fileno(), 'rb')
stdout = os.fdopen(stdout.fileno(), 'wb')
if argv[1:] == ['-c']:
stdout.write(b'mozLz40' + lz4.compress(stdin.read()))
elif argv[1:] == ['-d']:
assert stdin.read(8) == b'mozLz40'
stdout.write(lz4.decompress(stdin.read()))
else:
stderr.write('Usage: %s -c|-d <infile >outfilen' % argv[0])
stderr.write('Compress or decompress Mozilla-flavor LZ4 files.n')
exit(1)
Usage:
mozlz4 -d <previous.jsonlz4 >previous.json
mozlz4 -c <previous.json >previous.jsonlz4
Save this script as e.g. mozlz4
:
#!/usr/bin/env python
from sys import *
import os
try:
import lz4.block as lz4
except ImportError:
import lz4
stdin = os.fdopen(stdin.fileno(), 'rb')
stdout = os.fdopen(stdout.fileno(), 'wb')
if argv[1:] == ['-c']:
stdout.write(b'mozLz40' + lz4.compress(stdin.read()))
elif argv[1:] == ['-d']:
assert stdin.read(8) == b'mozLz40'
stdout.write(lz4.decompress(stdin.read()))
else:
stderr.write('Usage: %s -c|-d <infile >outfilen' % argv[0])
stderr.write('Compress or decompress Mozilla-flavor LZ4 files.n')
exit(1)
Usage:
mozlz4 -d <previous.jsonlz4 >previous.json
mozlz4 -c <previous.json >previous.jsonlz4
edited Apr 20 '18 at 21:42
answered Apr 1 '18 at 19:11
Håkon A. HjortlandHåkon A. Hjortland
17113
17113
I had to changeimport lz4
toimport lz4.block as lz4
, but it still didn't work. Some bytes vs string related error. OTOH this script worked with the import change: gist.github.com/Tblue/62ff47bef7f894e92ed5
– user31389
Apr 19 '18 at 11:45
1
@user31389: I updated the script. Does it work now?
– Håkon A. Hjortland
Apr 20 '18 at 21:44
add a comment |
I had to changeimport lz4
toimport lz4.block as lz4
, but it still didn't work. Some bytes vs string related error. OTOH this script worked with the import change: gist.github.com/Tblue/62ff47bef7f894e92ed5
– user31389
Apr 19 '18 at 11:45
1
@user31389: I updated the script. Does it work now?
– Håkon A. Hjortland
Apr 20 '18 at 21:44
I had to change
import lz4
to import lz4.block as lz4
, but it still didn't work. Some bytes vs string related error. OTOH this script worked with the import change: gist.github.com/Tblue/62ff47bef7f894e92ed5– user31389
Apr 19 '18 at 11:45
I had to change
import lz4
to import lz4.block as lz4
, but it still didn't work. Some bytes vs string related error. OTOH this script worked with the import change: gist.github.com/Tblue/62ff47bef7f894e92ed5– user31389
Apr 19 '18 at 11:45
1
1
@user31389: I updated the script. Does it work now?
– Håkon A. Hjortland
Apr 20 '18 at 21:44
@user31389: I updated the script. Does it work now?
– Håkon A. Hjortland
Apr 20 '18 at 21:44
add a comment |
Actually almost all Firefox profile lz4 files are mozlz4 files. It means they have the same "file format header".
Except one file. I talk about webext.sc.lz4 file. It has mozJSSCLz40v001
file header and maybe some sc
packaging to pack group of files to on byte stream.
There is a Firefox addon to read or compress .mozlz4 text files mozlz4-edit
add a comment |
Actually almost all Firefox profile lz4 files are mozlz4 files. It means they have the same "file format header".
Except one file. I talk about webext.sc.lz4 file. It has mozJSSCLz40v001
file header and maybe some sc
packaging to pack group of files to on byte stream.
There is a Firefox addon to read or compress .mozlz4 text files mozlz4-edit
add a comment |
Actually almost all Firefox profile lz4 files are mozlz4 files. It means they have the same "file format header".
Except one file. I talk about webext.sc.lz4 file. It has mozJSSCLz40v001
file header and maybe some sc
packaging to pack group of files to on byte stream.
There is a Firefox addon to read or compress .mozlz4 text files mozlz4-edit
Actually almost all Firefox profile lz4 files are mozlz4 files. It means they have the same "file format header".
Except one file. I talk about webext.sc.lz4 file. It has mozJSSCLz40v001
file header and maybe some sc
packaging to pack group of files to on byte stream.
There is a Firefox addon to read or compress .mozlz4 text files mozlz4-edit
edited Aug 6 '18 at 15:19
hlovdal
51258
51258
answered Mar 24 '18 at 19:18
user282490
add a comment |
add a comment |
Sufficiently persistent Googling for this turns up a lot of solutions, but most of them seem to be either (a) broken by subsequent changes to underlying libraries, or (b) unnecessarily complex (at least to my personal taste), making them clunky to drop into existing code.
The following appears to work at least on Python 2.7 and 3.6 using a recent version of the Python LZ4 bindings:
def mozlz4_to_text(filepath):
# Given the path to a "mozlz4", "jsonlz4", "baklz4" etc. file,
# return the uncompressed text.
import lz4.block
bytestream = open(filepath, "rb")
bytestream.read(8) # skip past the b"mozLz40" header
valid_bytes = bytestream.read()
text = lz4.block.decompress(valid_bytes)
return text
Of course this does not attempt to validate inputs (or outputs), is not intended to be secure, etc., but if one just wants to be able to parse one's own FF data, it gets the basic job done.
Command line version here, which could be saved in the relevant directory and invoked from the command line as:
chmod +x mozlz4.py
./mozlz4.py <file you want to read> <file to save output to>
New contributor
add a comment |
Sufficiently persistent Googling for this turns up a lot of solutions, but most of them seem to be either (a) broken by subsequent changes to underlying libraries, or (b) unnecessarily complex (at least to my personal taste), making them clunky to drop into existing code.
The following appears to work at least on Python 2.7 and 3.6 using a recent version of the Python LZ4 bindings:
def mozlz4_to_text(filepath):
# Given the path to a "mozlz4", "jsonlz4", "baklz4" etc. file,
# return the uncompressed text.
import lz4.block
bytestream = open(filepath, "rb")
bytestream.read(8) # skip past the b"mozLz40" header
valid_bytes = bytestream.read()
text = lz4.block.decompress(valid_bytes)
return text
Of course this does not attempt to validate inputs (or outputs), is not intended to be secure, etc., but if one just wants to be able to parse one's own FF data, it gets the basic job done.
Command line version here, which could be saved in the relevant directory and invoked from the command line as:
chmod +x mozlz4.py
./mozlz4.py <file you want to read> <file to save output to>
New contributor
add a comment |
Sufficiently persistent Googling for this turns up a lot of solutions, but most of them seem to be either (a) broken by subsequent changes to underlying libraries, or (b) unnecessarily complex (at least to my personal taste), making them clunky to drop into existing code.
The following appears to work at least on Python 2.7 and 3.6 using a recent version of the Python LZ4 bindings:
def mozlz4_to_text(filepath):
# Given the path to a "mozlz4", "jsonlz4", "baklz4" etc. file,
# return the uncompressed text.
import lz4.block
bytestream = open(filepath, "rb")
bytestream.read(8) # skip past the b"mozLz40" header
valid_bytes = bytestream.read()
text = lz4.block.decompress(valid_bytes)
return text
Of course this does not attempt to validate inputs (or outputs), is not intended to be secure, etc., but if one just wants to be able to parse one's own FF data, it gets the basic job done.
Command line version here, which could be saved in the relevant directory and invoked from the command line as:
chmod +x mozlz4.py
./mozlz4.py <file you want to read> <file to save output to>
New contributor
Sufficiently persistent Googling for this turns up a lot of solutions, but most of them seem to be either (a) broken by subsequent changes to underlying libraries, or (b) unnecessarily complex (at least to my personal taste), making them clunky to drop into existing code.
The following appears to work at least on Python 2.7 and 3.6 using a recent version of the Python LZ4 bindings:
def mozlz4_to_text(filepath):
# Given the path to a "mozlz4", "jsonlz4", "baklz4" etc. file,
# return the uncompressed text.
import lz4.block
bytestream = open(filepath, "rb")
bytestream.read(8) # skip past the b"mozLz40" header
valid_bytes = bytestream.read()
text = lz4.block.decompress(valid_bytes)
return text
Of course this does not attempt to validate inputs (or outputs), is not intended to be secure, etc., but if one just wants to be able to parse one's own FF data, it gets the basic job done.
Command line version here, which could be saved in the relevant directory and invoked from the command line as:
chmod +x mozlz4.py
./mozlz4.py <file you want to read> <file to save output to>
New contributor
New contributor
answered 30 mins ago
Samuel HendersonSamuel Henderson
11
11
New contributor
New contributor
add a comment |
add a comment |
Thanks for contributing an answer to Unix & Linux Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f326897%2fhow-to-decompress-jsonlz4-files-firefox-bookmark-backups-using-the-command-lin%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Cross reference: Reading "jsonlz4" bookmarkbackup files • mozillaZine Forums (2014-11-04)
– Graham Perrin
Oct 19 '17 at 1:28