是否可以使用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。
我无法从整个数据中获得任何输出答案 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(我假设您正在尝试做的事情)的方式不起作用。
重新检查文件的格式/架构。