Вывод данных Firefox JSON - PullRequest
1 голос
/ 24 мая 2009

Можно ли выводить конкретные данные JSON (экспортированные из закладок Firefox) с помощью PHP.

Это код, который у меня есть, он перекодирует данные, так как Firefox не экспортирует их в правильном формате UTF-8. Я также удаляю завершающий конец файла.

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

Мне не удалось получить какой-либо вывод, кроме целых данных, используя var_dump.

Ответы [ 2 ]

3 голосов
/ 25 мая 2009

Хотя json_decode () может декодировать

<?php
$c = '{"title":""}';
$bookmarks = json_decode($c);
var_dump($bookmarks);
, он не работает на
$c = '{"title":""<b>,</b>}';
"Пустой" элемент в конце отбрасывает парсер. И именно так выглядит мой bookmarks.json
{"title":"", ... "children":[]}<b>,</b>]}

edit: json.org ссылки на Сравнение библиотек php json . И согласно их сравнительной таблице, например, zend json должен уметь анализировать firefox 'bookmark.json. Не проверял это все же.

edit2: почему бы просто не проверить это ....? Да, Zend JSON может анализировать неизмененные закладки. Json

require 'Zend/Json.php';</p>

<p>$encodedValue = file_get_contents('Bookmarks 2009-05-24.json');
$phpNative = Zend_Json::decode($encodedValue);
var_dump($phpNative);
printts
array(7) {
  ["title"]=>
  string(0) ""
  ["id"]=>
...
      ["children"]=>
      array(0) {
      }
    }
  }
}
2 голосов
/ 25 мая 2009

Как говорит VolkerK, вы должны обрезать запятые перед ] и }:

// ... 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));

Но способ, которым вы пытаетесь получить доступ к URI закладок (я полагаю, это то, что вы пытаетесь сделать), не сработает.

Перепроверьте формат / схему файла.

...