输出Firefox JSON数据

时间:2009-05-24 19:53:15

标签: php json firefox bookmarks

是否可以使用PHP输出特定的JSON数据(从Firefox书签导出)。

这是我到目前为止的代码,它将重新编码数据,因为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 个答案:

答案 0 :(得分:3)

虽然json_decode()能够解码

<?php
$c = '{"title":""}';
$bookmarks = json_decode($c);
var_dump($bookmarks);
但它在
$c = '{"title":"",}';
上失败。最后的“empty”元素会抛出解析器。 而这正是我的bookmarks.json看起来像
{"title":"", ... "children":[]},]}

修改:json.org指向Comparison of php json libraries的链接。并根据他们的比较图表,例如zend json应该能够解析firefox'Bookbook.json。虽然没有测试过。

edit2:为什么不简单地测试它......? 是的,zend json能够解析未经修改的bookmarks.json

require 'Zend/Json.php';

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

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

答案 1 :(得分:2)

正如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(我假设您正在尝试做的事情)的方式不起作用。

重新检查文件的格式/架构。