How to decompress jsonlz4 files (Firefox bookmark backups) using the command line?












14















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?










share|improve this question























  • Cross reference: Reading "jsonlz4" bookmarkbackup files • mozillaZine Forums (2014-11-04)

    – Graham Perrin
    Oct 19 '17 at 1:28
















14















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?










share|improve this question























  • Cross reference: Reading "jsonlz4" bookmarkbackup files • mozillaZine Forums (2014-11-04)

    – Graham Perrin
    Oct 19 '17 at 1:28














14












14








14


5






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?










share|improve this question














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






share|improve this question













share|improve this question











share|improve this question




share|improve this question










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



















  • 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










4 Answers
4






active

oldest

votes


















11














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





share|improve this answer


























  • 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 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











  • @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



















7














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





share|improve this answer


























  • 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





    @user31389: I updated the script. Does it work now?

    – Håkon A. Hjortland
    Apr 20 '18 at 21:44



















3














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






share|improve this answer

































    0














    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>





    share|improve this answer








    New contributor




    Samuel Henderson is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
    Check out our Code of Conduct.




















      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
      });


      }
      });














      draft saved

      draft discarded


















      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









      11














      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





      share|improve this answer


























      • 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 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











      • @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
















      11














      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





      share|improve this answer


























      • 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 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











      • @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














      11












      11








      11







      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





      share|improve this answer















      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






      share|improve this answer














      share|improve this answer



      share|improve this answer








      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 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











      • @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








      • 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 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











      • @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













      7














      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





      share|improve this answer


























      • 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





        @user31389: I updated the script. Does it work now?

        – Håkon A. Hjortland
        Apr 20 '18 at 21:44
















      7














      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





      share|improve this answer


























      • 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





        @user31389: I updated the script. Does it work now?

        – Håkon A. Hjortland
        Apr 20 '18 at 21:44














      7












      7








      7







      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





      share|improve this answer















      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






      share|improve this answer














      share|improve this answer



      share|improve this answer








      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 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





        @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






      • 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











      3














      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






      share|improve this answer






























        3














        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






        share|improve this answer




























          3












          3








          3







          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






          share|improve this answer















          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







          share|improve this answer














          share|improve this answer



          share|improve this answer








          edited Aug 6 '18 at 15:19









          hlovdal

          51258




          51258










          answered Mar 24 '18 at 19:18







          user282490






























              0














              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>





              share|improve this answer








              New contributor




              Samuel Henderson is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
              Check out our Code of Conduct.

























                0














                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>





                share|improve this answer








                New contributor




                Samuel Henderson is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                Check out our Code of Conduct.























                  0












                  0








                  0







                  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>





                  share|improve this answer








                  New contributor




                  Samuel Henderson is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                  Check out our Code of Conduct.










                  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>






                  share|improve this answer








                  New contributor




                  Samuel Henderson is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                  Check out our Code of Conduct.









                  share|improve this answer



                  share|improve this answer






                  New contributor




                  Samuel Henderson is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                  Check out our Code of Conduct.









                  answered 30 mins ago









                  Samuel HendersonSamuel Henderson

                  11




                  11




                  New contributor




                  Samuel Henderson is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                  Check out our Code of Conduct.





                  New contributor





                  Samuel Henderson is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                  Check out our Code of Conduct.






                  Samuel Henderson is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                  Check out our Code of Conduct.






























                      draft saved

                      draft discarded




















































                      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.




                      draft saved


                      draft discarded














                      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





















































                      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







                      Popular posts from this blog

                      Accessing regular linux commands in Huawei's Dopra Linux

                      Can't connect RFCOMM socket: Host is down

                      Kernel panic - not syncing: Fatal Exception in Interrupt