2013-05-16 7 views
2

수천 번 질문했지만이 작업을 올바르게 수행하는 방법에 대한 좋은 자습서를 찾을 수 없다면 사과드립니다. 스택에서 검색하는 것이 가장 중요합니다. 거기에 대한 50 개 항목에PHP로 JSON 데이터 가져 오기

{ 
     "store":"Store 1", 
     "cat":"Categories", 
     "general_cat":"Categories", 
     "spec_cat":"Accessories" 
    }, 
    { 
     "store":"Store 1", 
     "cat":"Categories", 
     "general_cat":"Categories", 
     "spec_cat":"Accessories" 
    }, 

:

은 내가 JSON의이 같은 데이터가 파일이 있습니다. 이 데이터를 구문 분석하고 값을 변수에 저장하려고합니다.

은 지금까지 나는 시도했다 :

$string  = file_get_contents("jsonFile.json"); 
$json_array = json_decode($string,true); 

foreach ($json_array as $key => $value){ 

    $store = $key -> store; 
    $general_cat = $key -> general_cat; 
    $spec_cat = $key -> spec_cat; 

    if (!is_null($key -> mainImg_select)){ 
     $cat = $key -> cat; 
    } 

    echo $headURL; 
} 

이 발생되는 오류 "가 아닌 객체의 속성을 얻기 위해 노력"에. 여기서 내가 뭘 잘못하고 있니?

+1

먼저 차이를 설명 할 것이다, 당신의 JSON 코드는 의미 상 올바르지 않습니다. 객체 목록은'[{...}, {...}]'와 같이'['와']'사이에 있어야합니다. 둘째,'json_decode'의 두 번째 매개 변수에 'true'값을 사용하고 있습니다. true로 설정하면 객체를 조작하지 않고 연관 배열을 조작합니다. 그래서'$ key-> store'는 사용할 수 없습니다. 동시에'$ value [ "store"]'일 수도 있습니다. – MatRt

+0

JSON은 대괄호 사이에 있으며, 데이터가 저장되는 방식을 보여 주려했습니다.json_decode의 두 번째 값을 false로 설정하려고했지만 여전히 객체가 아닌 오류가 발생합니다. – Jascination

+1

그것은'$ key'가 아니라'$ value'를 사용해야하기 때문입니다. 내 대답을 완전히 읽으십시오. 'json_decode' 다음에,'$ json_array'는 연관 배열의 배열입니다. 그래서,'$ key'는 수치 인덱스이고,'$ value'는 당신이 조작 할 배열입니다. – MatRt

답변

11

에 나란히 놓이는 json_decode의 두 번째 인수는 오브젝트 또는 어레이로 데이터를 반환하는 함수의 여부를 알려준다.

개체 액세스는 -> 기호를 사용합니다. json_decode에서 개체를 반환하려면 하나를 사용 json_decode($jsonString) 또는 json_decode($jsonString, false)

$jsonString = '{ "this_is_json" : "hello!" }'; 

$obj = json_decode($jsonString); 

echo $obj->this_is_json // "hello!"; 

는 또한 true

$jsonString = '{ "this_is_json" : "hello!" }'; 

$arr = json_decode($jsonString, true); 

echo $arr['this_is_json'] // "hello!"; 

에 두 번째 인수를 설정하여 배열로 JSON 데이터에 액세스 할 수 있습니다 (두 번째 인수는 false by default입니다) 어떤 조금 더 개념적으로 혼란 스러울 수 있습니다. PHP json_decode은 객체가 아닌 객체 배열 또는 연관 배열을 반환 할 수 있습니다.

다음 json 문자열을 고려하십시오. 이 문자열은 json 데이터 구조 (중괄호)의 "모음"(대괄호)을 나타냅니다.

[ 
    { 
     "name": "One" 
    }, 
    { 
     "name": "Two" 
    } 
] 

우리가 변수 $string이 JSON을 할당하면 희망이

$asObjects = json_decode($string); 

$asAssociativeArray = json_decode($string, true); 

foreach ($asObjects as $obj) { 
    echo $obj->name; 
} 

foreach ($asAssociativeArray as $arr) { 
    echo $arr['name']; 
} 
4

는하지만, 객체로 사용하려고합니다 (json_decode 함수에 두 번째 매개 변수로 진정한 전달하여) 연관 배열을 요청하는 것 같다.

시도 $json_array = json_decode($string,false);. 즉 @MatRt 언급, 당신은 객체를 참조하는 $ 키 대신 $ 값을 사용해야

또한 개체를 반환합니다

당신은 배열 구문을 사용하여 값을 검색해야
3

:

$item['key'] 

등을

$item->key 
+0

이것은 오류를 없애고 있지만 변수는 비어 있습니다. '\t $ store = $ key ['store '];'print_r ($ store);을 실행 해보십시오 빈 화면이 나타납니다 – Jascination

+0

foreach 시도 ($ json_array를 $ key로 사용) – DeweyOx