2009-05-24 11 views
1

PHP를 사용하여 특정 JSON 데이터 (Firefox 책갈피에서 내 보낸)를 출력 할 수 있습니까?Firefox JSON 데이터 출력

이것은 내가 지금까지 가지고있는 코드입니다. 파이어 폭스가 올바른 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

을 구문 분석 할 수있다, 당신은 둘 ]} 전에 쉼표를 제거해야 당신은 북마크의 URI에 접근하려고 시도하고있다.

파일의 형식/스키마를 다시 확인하십시오.

+0

모든 URIS를 출력하는 예도 제공 할 수 있습니까? 나는 내가 무엇을 놓친 지 안다. –

+0

json이나 $ hDec의 var_dump()를 보면 URI와 s의 목록이 아니라는 것을 알 수 있습니다. 루트 엔트리를 위해 모든 아이들을 거쳐야하고, 그 다음 아이들은 모두 등등이어야합니다. 그러면 아이들은 당신이 할 수 있거나 필터링 할 수있는 uri 값을 갖습니다. –

3

json_decode()가

<?php 
$c = '{"title":""}'; 
$bookmarks = json_decode($c); 
var_dump($bookmarks);
을 디코딩 할 수 있지만
$c = '{"title":"",}';
에서 실패합니다. 끝에있는 "빈"요소는 구문 분석기를 해제합니다. 그리고 내 bookmarks.json이
{"title":"", ... "children":[]},]}

편집처럼 보이는 정확히 무엇 : Comparison of php json libraries-json.org 링크. 그리고 그들의 비교 차트에 따르면. zend json은 firefox 'bookmark.json을 구문 분석 할 수 있어야합니다. 비록 그것을 테스트하지 않았습니다.

edit2 : 왜 단순히 테스트하지 않습니까 ....?

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

그러나 방법 : 예, 젠드 JSON은 VolkerK가 말했듯이 수정되지 않은 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) { 
     } 
    } 
    } 
}

+0

이렇게 할 수있는 방법이 있습니까? –

+0

나는 라이브러리의 사용을 피하려고 노력하고있다. 그러나 이것이 유일한 옵션 인 것으로 끝나면 나는 그것을 들여다 볼 것이다. –