2016-07-07 1 views
-1

회사의 API를 사용하여 뭔가를 시험해보고 싶었습니다. 데이터를 데이터베이스에 저장하려고했습니다. 하지만 문제가 생겼어. API에는 "venue.country"라는 하나의 JSON 객체가 있습니다. 하지만 어떤 이유로 배열에서 도트를 사용할 수 없습니까? 여기 배열에서 도트를 사용할 수없는 이유는 무엇입니까?

코드입니다 : PHP를 에서

foreach ($data[1]['hits']['hits'] as $row) { 
     $statement->execute(array(
      "name" => $row['fields']['name'][0], 
      "date" => $row['fields']['start'][0], 
      "lang_long" => "test", 
It is this one! -> "country" => $row['fields']['venue.country'][0], 
      "genres" => $row['fields']['genres'][0], 
      "desc" => $row['fields']['description'][0], 
      "logo" => $row['fields']['logo'][0], 
      "header_pic" => $row['fields']['header'][0] 
     )); 
    } 

\ 모든 다른 작품 그리고 여기에 JSON의 조각입니다 :

venue.country: [ 
"Nederland" 
], 

가 어떻게이 작업을 얻을 수 있나요? "폭발"방법을 사용할 수 있습니까? https://hugo.events/genre/pop/next/200/120

감사 :

이 전체 JSON이다.

편집 : 응답 @Prototype 체인은 나에게이 오류주고있다 준도 함께 :이 트릭을 할 것입니다 Notice: Undefined index: venue in /home/ubuntu/workspace/pop.php on line 18

+1

정말 PHP 오류입니까? 어떤 오류가 발생하고 있습니까? – ordonezalex

+0

'print_r ($ row);'의 결과는 무엇입니까? – Rizier123

답변

0

코드는 잘 작동합니다. 디버깅 후, 배열 요소 $ data [1] [ 'hits'] [ 'hits'] [50]과 $ data [1] [ 'hits'] [ 'hits'] [ 히트 곡] [51]. 색인이 없으므로 던지기 알림.

변수 앞에 @를 붙이면 통지가 표시되지 않거나 색인 exix가 있으면 조건을 확인할 수 있습니다.

"country" => @$row['fields']['venue.country'][0], 

"country" => isset($row['fields']['venue.country']) ? $row['fields']['venue.country'][0] : '', 

// 테스트를 위해이 코드를 실행하십시오.

error_reporting(E_ALL); 
ini_set('display_errors', 1); 
$jsondata = file_get_contents('https://hugo.events/genre/pop/next/200/100'); 
$data  = json_decode($jsondata, true); 
foreach ($data[1]['hits']['hits'] as $row) { 
    // echo $row['fields']['name'][0].'=>'[email protected]$row['fields']['venue.country'][0].'<br/>'; 
    $array[]= array(
     "name" => $row['fields']['name'][0], 
     "country" => isset($row['fields']['venue.country']) ? $row['fields']['venue.country'][0] : '' 
     ); 
} 
echo "<pre>"; 
print_r($array); 
+0

당신의 코드를 사용할 때 나는 아직도 데이터베이스에있는 나라를 얻지 못합니다. –

+0

당신은 모든 행이 소수를위한 나라가 아니라는 것을 의미합니까? –

+0

나는 모든 나라를 위해 그들을 gettimg하지 않는다 –

-2

희망 ..

$row['fields']['venue']['country'][0] 
+0

Nope가 작동하지 않았습니다. –

0

그것은 보지 않고 디버깅 조금 어렵다를 그러나 JSON 데이터의 전체 내용은 과거에는 이상하게도 형식화 된 소스에서 JSON 또는 XML 데이터를 파싱하는 데 어려움이 있었지만 이전에 데이터에 대한 사전 처리 str_replace()를 수행하는 것이 유용하다는 것을 알았습니다. 그것을 분석했다.

그래서 이런 일이 당신을 위해 일 수 있습니다

$input = some_function_to_get_string_data_from_api(); 
$input = str_replace("venue.country", "venuecountry", $input); 
$json = json_encode($input); 

그것은 우아한 해결책이 아니다, 그리고 당신이 많은 및 수정 필요 필드를 많이 상대하고있는 경우 신속하게 무너지게하지만, 만약 ' 당신에게 문제를 일으키고있는 하나 또는 두 개의 필드 만 다루면, 빠르고 더러운 패치가 될 수 있습니다.

+0

여전히 같은 오류입니다. 코드를 내 코드 –

+0

과 일치하도록 변경했습니다.이 경로를 사용하면 다음과 같이 변경해야합니다. $ row [ 'fields'] [ 'venue.country'] [0] to : $ row [ 'fields'] [ 'venuecountry'] [0] 변경 한 후에도 여전히 같은 오류가 발생하는 경우 필드 이름에 점과 관련이없는 오류입니다. – stevecomrie

+0

여전히 동일한 오류가 발생합니다. 그러면 API를 확인해야 할 것입니다. –

1

이 코드는 잘 JSON 데이터 귀하의 예제 주어진 작품 :

$string = <<<EOT 
    {INSERT YOUR JSON STRING HERE} 
EOT; 

$json = json_decode($string, true); 
echo $json[1]['hits']['hits'][0]['fields']['venue.location'][0] . "\n"; 
echo $json[1]['hits']['hits'][0]['fields']['venue.location'][1] . "\n"; 
+0

그것은 많은 잘못된 문자열 오프셋을 제공합니다 : https://wtd-server-a1070rik.c9users.io/pop.PHP 체크 아웃 –

+0

해당 pop.php 페이지에서 사용중인 전체 코드의 bin을 게시하십시오. 그 오류는 <<< EOT 블록 안의 문자열 주위에 따옴표를 넣는 것과 같은 것을하지 않으면 의미가 없습니다. – stevecomrie

+0

<<< EOT 블록을 사용할 수 없습니다. 나는 url을 사용할 필요가있다. 다른 모든 것들을 자동으로 처리해야하는데 그건 내 목적이 아니야 –

관련 문제