2009-05-24 8 views
1

Est-il possible de générer des données JSON spécifiques (exportées à partir de signets Firefox) en utilisant PHP.Sortie des données JSON de Firefox

Ceci est le code que j'ai jusqu'à présent, il va ré-encoder les données car Firefox ne l'exporte pas de la bonne manière UTF-8. Je supprime également le suivi, à la fin du fichier.

<?php 
// Read the file blah blah 
$hFile = "../uploads/james.json"; 
$hFile = file_get_contents($hFile); 
$hFile = utf8_encode($hFile); 
// Remove the trailing comma because Firefox is lazy!!!! 
$hFile = substr($hFile, 0, strlen($hFile)-3) . "]}"; 

$hDec = json_decode(fixEncoding($hFile)); 

foreach($hDec['uri'] as $hURI) { 
    // Output here 
} 

// Fixes the encoding to UTF-8 
function fixEncoding($in_str) { 
    $cur_encoding = mb_detect_encoding($in_str); 
    if($cur_encoding == "UTF-8" && mb_check_encoding($in_str,"UTF-8")){ 
     return $in_str; 
    }else{ 
     return utf8_encode($in_str); 
    } 
} 
?> 

Je n'ai pas pu obtenir de sortie en dehors de l'ensemble des données, en utilisant var_dump.

Répondre

2

Comme le dit VolkerK, vous devez dépouiller les virgules avant que les deux ]et}:

// ... row 7 
// Remove the trailing comma because Firefox is lazy 
$hFile = preg_replace('/,\s*([\]}])/m', '$1', $hFile); 

// ... or using str_replace 
$hFile = str_replace(',]', ']', str_replace(',}', '}', $hFile)); 

Mais, la manière vous essayez d'accéder à l'URI des signets (ce que je suppose est ce que vous essayez de faire) ne fonctionnerait pas.

Revérifiez le format/schéma du fichier.

+0

Pourriez-vous également donner un exemple de sortie de tout URIS? Je ne vois pas ce que j'ai raté. –

+0

Si vous examinez json ou var_dump() de $ hDec, vous voyez qu'il ne s'agit pas d'une liste d'URI: s et de noms. Vous devez passer par tous les enfants pour l'entrée de la racine, puis tous leurs enfants etc. Les enfants ont alors une valeur d'uri avec laquelle vous pouvez faire des choses ou filtrer. –

3

Alors que json_decode() est capable de décoder

<?php 
$c = '{"title":""}'; 
$bookmarks = json_decode($c); 
var_dump($bookmarks);
il échoue sur
$c = '{"title":"",}';
L'élément « vide » à la fin lance l'analyseur hors tension. Et c'est exactement ce que mon bookmarks.json ressemble
{"title":"", ... "children":[]},]}

modifier: json.org liens vers Comparison of php json libraries. Et selon leur tableau de comparaison par ex. zend json devrait être capable d'analyser firefox 'bookmark.json. Je ne l'ai pas testé cependant.

edit2: pourquoi ne pas simplement le tester ....? Oui, zend JSON est capable d'analyser le bookmarks.json non modifié

require 'Zend/Json.php';

$encodedValue = file_get_contents('Bookmarks 2009-05-24.json'); $phpNative = Zend_Json::decode($encodedValue); var_dump($phpNative);

imprime
array(7) { 
    ["title"]=> 
    string(0) "" 
    ["id"]=> 
... 
     ["children"]=> 
     array(0) { 
     } 
    } 
    } 
}

+0

Alors, est-ce possible? –

+0

J'essaie d'éviter l'utilisation de bibliothèques, mais si cela s'avère être la seule option, je l'examinerai. –

Questions connexes