2010-06-19 6 views
0

json 콘텐츠에서 특정 값을 추출하려고합니다. 여기에 json 코드 http://www.ebayclassifieds.com/m/AreaSearch?jsoncallback=json&lat=41.1131514&lng=-74.0437521과 연결된 코드가 표시 될 수 있습니다. php json decode - 값 가져 오기

 
json({items:[{url:" http://fairfield.ebayclassifieds.com/ ",name:"Fairfield"},{url:" http://newyork.ebayclassifieds.com/ ",name:"New York City"}],error:null});
이 경우 " http://fairfield.ebayclassifieds.com/"이고 이름이 "Fairfield"인 첫 번째 URL을 추출해야합니다. regex하지만 json_decode를 사용하는 것을 선호합니다. 불행히도 디코딩하려고하면 작동하지 않습니다.

 
$json = getContent("http://www.ebayclassifieds.com/m/AreaSearch?jsoncallback=json&lat=41.1131514&lng=-74.0437521"); 
$test = json_decode($json, true); 
+2

문제는 유효하지 않은 JSON입니다. "열쇠"는 따옴표 안에 있어야합니다. (예 :'{ "items": [{ "url": "http://fairfield.ebayclassifieds.com/", name : "Fairfield"}} 조금이지만'json_decode' 함수는 잘못된 따옴표 때문에'JSON_ERROR_SYNTAX' 오류를 생성합니다. –

+0

방금 ​​이것을 깨닫고 대답을 업데이트했습니다. – dmp

답변

0

유효하지 않은 JSON입니다. 키는 따옴표로 묶어야합니다.

뛰어난 JSON Lint 사이트를 사용하여 json의 유효성을 검사 할 수 있습니다. danp 이미 말했듯

{ 
"items": [ 
    { 
     "url": "http://fairfield.ebayclassifieds.com/", 
     "name": "Fairfield" 
    }, 
    { 
     "url": "http://newyork.ebayclassifieds.com/", 
     "name": "New York City" 
    } 
], 
"error": "null" 
} 
+0

나는 $ test = '{items : [{url : "http://fairfield.ebayclassifieds.com/", 이름 : "Fairfield"}, {url : "http://newyork.ebayclassifieds.com/" 이름 : "New York City"}], 오류 : null} '; $ js = json_decode ($ test, true); echo "the js is $ js"; – Michael

+0

"작동하지 않음"을 어떻게 의미합니까? 어떤 오류입니까? – dmp

+0

답변을 업데이트했습니다. 유효하지 않습니다. 죄송합니다. :) – dmp

2

, 반환이 JSON (jsoncallback=json 의해 지정된) 함수 호출에 봉입되어

이 반환 된 데이터의 유효한 버전이다. 제공과

$json = trim(trim($json), "();"); 

: 당신은 AreaSearch?jsoncallback=&lat=41.1131514&lng=-74.0437521 문자열의 시작 부분에 적어도 json을 제거하고하여 괄호를 제거 할 수 있습니다 사용이 완전히 제거하지만, 얻을 수 없습니다

{items:[{url:"http://fairfield.ebayclassifieds.com/",name:"Fairfield"},{url:"http://newyork.ebayclassifieds.com/",name:"New York City"}],error:null} 

유감스럽게도 JSON 문자열은 유효하지 않습니다. 키 (items, url, ...)는 따옴표로 묶어야합니다 ("). json_last_error() (오류 코드 4, JSON_ERROR_SYNTAX) 구문 오류가 있는지 쉽게 확인할 수 있습니다. 이 질문에 따르면

:

업데이트

Invalid JSON parsing using PHP, 당신과 함께 JSON 문자열이 유효 할 수 있습니다 :

$json = preg_replace('/(\w+):/i', '"\1":', $json); 

이 따옴표로 키를 둘러싼 다.


문자열 유효 할 경우, 다음을 통해 배열을 생성 할 수 있습니다 : 당신에게 줄 것

$a = json_decode($json, true); 

:

Array 
(
    [items] => Array 
     (
      [0] => Array 
       (
        [url] => http://fairfield.ebayclassifieds.com/ 
        [name] => Fairfield 
       ) 
      [1] => Array 
       (
        [url] => http://newyork.ebayclassifieds.com/ 
        [name] => New York City 
       ) 
     ) 
    [error] => 
) 

그래서 첫 번째 URL을 얻을 수를 이름은 $a['items'][0]['url']$a['items'][0]['name'] resp.


하지만 반복, 당신은 응답으로 얻을 JSON은 유효하지 그리고 당신은 원래의 형태로 json_decode() 그것을 구문 분석 할 수 없습니다.

+0

현재 "유효하지 않은 json"을 사용할 수있는 방법이 있습니까? 기본적으로 어떻게 ebayclassifieds에서 가져 오는거야 그래서 내가 ebayclassifieds 사이트를 소유하고 있지 않기 때문에 표시되는 방법을 바꿀 수 없다 :) – Michael

+1

@Michael : 업데이트 된 답변보기 ... –

+0

이제 $ test = '({items : [{url : "http://fairfield.ebayclassifieds.com/", 이름 : "Fairfield"}, {url : "http://newyork.ebayclassifieds.com/", 이름 : "New York City"}] , 오류 : null}); '; $ test = trim (trim ($ test), "();"); $ test = preg_replace ('/ (\ w +) :/i', ' "\ 1":', $ test); $ js = json_decode ($ test, true); echo "the js is $ js"; 하지만 작동하지 않습니다 : ( – Michael