2017-09-13 4 views
0

J'ai créé ma propre sauvegarde de signet JSON selon cette page: http://kb.mozillazine.org/Backing_up_and_restoring_bookmarks_-_Firefox#Creating_bookmark_backupsComment analyser la sauvegarde manuelle des signets JSON de Firefox en utilisant jq?

Je ne vais pas poster mon JSON fichier de sauvegarde de signet ici (il est trop grand), vous pouvez créer votre propre fichier et jeter un oeil à le fichier entier.

Puis pour les tests que je viens d'essayer d'obtenir le uri de tous les signets (plus tard, je vais extraire d'autres données aussi), mais cela n'a pas

jq -r '.[] | .uri' bookmarks-2017-09-13.json 
jq: error (at bookmarks-2017-09-13.json:1): Cannot index string with string "uri" 

jq -r '.uri' bookmarks-2017-09-13.json 
null 

version de Firefox: Firefox 55.0.2 (64 bits) avec Ubuntu 16.04 LTS

version JQ: JQ-1.5-1-a5b5cbe

Cordialement

Répondre

0

Voici une solution en utilisant tostream.

tostream      # read [[path],value] and [[path]] stream 
    | select(length==2) as [$p,$v] # put [path] in $p and value in $v 
    | select($p[-1] == "uri")  # keep paths ending in "uri" 
    | $v        # emit value 

Si le filtre ci-dessus est en filter.jq et data.json contient les données de signet exemple suivant:

{ 
    "guid": "root________", 
    "title": "", 
    "index": 0, 
    "dateAdded": 1000000000000000, 
    "lastModified": 1000000000000000, 
    "id": 1, 
    "type": "text/x-moz-place-container", 
    "root": "placesRoot", 
    "children": [ 
    { 
     "guid": "menu________", 
     "title": "Bookmarks Menu", 
     "index": 0, 
     "dateAdded": 1000000000000000, 
     "lastModified": 1000000000000000, 
     "id": 2, 
     "type": "text/x-moz-place-container", 
     "root": "bookmarksMenuFolder", 
     "children": [ 
     { 
      "guid": "ygE5SOG8IWid", 
      "title": "Stack Overflow", 
      "index": 0, 
      "dateAdded": 1000000000000000, 
      "lastModified": 1000000000000000, 
      "id": 3, 
      "iconuri": "https://cdn.sstatic.net/Sites/stackoverflow/img/favicon.ico?v=4f32ecc8f43d", 
      "annos": [ 
      { 
       "name": "bookmarkProperties/description", 
       "flags": 0, 
       "expires": 4, 
       "value": "Stack Overflow is the largest, most trusted online community for developers to learn, share​ ​their programming ​knowledge, and build their careers." 
      } 
      ], 
      "type": "text/x-moz-place", 
      "uri": "https://stackoverflow.com/" 
     } 
     ] 
    } 

ensuite la commande

$ jq -Mr -f filter.jq data.json 

produit

https://stackoverflow.com/ 
+0

@ Zigobs J'ai ajouté quelques commentaires comme vous l'avez demandé. Pour avoir une meilleure idée de ce que fait 'tostream', essayez-le. par exemple. 'jq -Mr tostream data.json' – jq170727