2016-12-17 3 views
1

이 복잡한 JSON을 구문 분석하여 PHP에 넣으므로 dropdown을 생성 할 수 있습니다.PHP에서 내포 된 JSON을 구문 분석하는 방법

$json = '[ 
    { 
     "class":"autocomplete", 
     "name":"autocomplete-1481957691348-preview", 
     "value":"there is nothing like me", 
     "id":"autocomplete-1481957691348-preview", 
     "type":"autocomplete", 
     "tag":"INPUT" 
    }, 
    { 
     "class":"form-control", 
     "name":"file-1481957721195-preview", 
     "value":"", 
     "id":"file-1481957721195-preview", 
     "type":"file", 
     "tag":"INPUT" 
    }, 
    { 
     "select-box":[ 
     { 
      "selectName":"apple", 
      "optionValue":"apple" 
     }, 
     { 
      "selectName":"banana", 
      "optionValue":"banana" 
     }, 
     { 
      "selectName":"kiwi", 
      "optionValue":"kiwi" 
     } 
     ] 
    }, 
    { 
     "class":"form-control", 
     "name":"select-1481957826542-preview", 
     "value":"jadu", 
     "id":"select-1481957826542-preview", 
     "type":"select", 
     "tag":"SELECT" 
    } 
]'; 

작동되지 않는

나는 내 관심은 JSON

{ 
      "select-box":[ 
      { 
       "selectName":"apple", 
       "optionValue":"apple" 
      }, 
      { 
       "selectName":"banana", 
       "optionValue":"banana" 
      }, 
      { 
       "selectName":"kiwi", 
       "optionValue":"kiwi" 
      } 
      ] 
     } 
위에서이 object입니다 지금 내가 이런 일을하고 있어요

<select name="select-box"> 
    <option value="apple">apple</option> 
    <option value="banana">banana</option> 
    <option value="kiwi">kiwi</option> 
</select> 

로 드롭 다운을 구성 할

하지만 난 싶지 않아 parse 갈라져. 대신에 나는 두 번째 매개 변수는 배열이 아닌 객체로 데이터를 반환하는 json_decode로서 당신은 진정한 전달할 수 전체를 JSON

$arrData = json_decode($json); 
    echo '<select name=''>'; 
    foreach($arrData as $key=>$objData){ 
     echo '<option value='".$objData->selectName."'>'.$objData->selectName.'</option>'; 
    } 
echo '</select>'; 
+0

ㅁ 당신은 실제로 선택 태그에 표시하고 싶습니까? – Ionut

+0

코드에 표시된 두 번째 json을 표시해야하지만 구조는 첫 번째 json –

답변

1

을 구문 분석합니다. 또한 당신이 이름뿐만 아니라 선택 상자 옵션 값으로 각 옵션의 'SELECTNAME'값을 사용했다 어디 한 일을 복사 한

// Decode all of the JSON string and store into variable 
$decodedJson = json_decode($json, true); 

// Retrieve only the select box related data from all of the decoded JSON data 
$selectOptions = $decodedJson[2]['select-box']; 

echo '<select name="">'; 

foreach($selectOptions as $selectOption) { 
    echo '<option value="'.$selectOption['selectName'].'">'.$selectOption['selectName'].'</option>'; 
} 

echo '</select>'; 

: 그럼 당신은 다음을 수행 할 수있다. 대신 'optionValue'값을 사용하도록 변경하려는 경우 확실하지 않지만이를 대비하여 인상 할 것이라고 생각했습니다.

희망이 도움이됩니다.

echo '<select name=''>';

가 있어야한다 :

echo '<select name="">';

당신은 배열로 객체를 변환하고 이런 식의 구문을 분석 할 수 있습니다

+0

과 같아야합니다. 그러나 json 구조는 동적으로 변경됩니다. –

+0

어떤 의미로? 이로 인해 어떤 문제가 발생합니까? –

+0

이'$ selectOptions = $ decodedJson [2] [ 'select-box'];'동적 값에 대해 작동하지 않습니다 –

2

당신은 같은 코드에서 몇 가지 실수를했다
<?php 
$json = '[ 
    { 
     "class":"autocomplete", 
     "name":"autocomplete-1481957691348-preview", 
     "value":"there is nothing like me", 
     "id":"autocomplete-1481957691348-preview", 
     "type":"autocomplete", 
     "tag":"INPUT" 
    }, 
    { 
     "class":"form-control", 
     "name":"file-1481957721195-preview", 
     "value":"", 
     "id":"file-1481957721195-preview", 
     "type":"file", 
     "tag":"INPUT" 
    }, 
    { 
     "select-box":[ 
     { 
      "selectName":"apple", 
      "optionValue":"apple" 
     }, 
     { 
      "selectName":"banana", 
      "optionValue":"banana" 
     }, 
     { 
      "selectName":"kiwi", 
      "optionValue":"kiwi" 
     } 
     ] 
    }, 
    { 
     "class":"form-control", 
     "name":"select-1481957826542-preview", 
     "value":"jadu", 
     "id":"select-1481957826542-preview", 
     "type":"select", 
     "tag":"SELECT" 
    } 
]'; 

$arrData = json_decode($json, true); 
    echo '<select name="">'; 
    foreach($arrData as $objData){ 
     $for_select = $objData['select-box']; 
     if(is_array($for_select)){ 
      foreach($for_select as $sel){ 
       echo '<option value="'.$sel['selectName'].'">'.$sel['selectName'].'</option>'; 
      } 
     } 
    } 
    echo '</select>'; 
+0

작은 따옴표는 이스케이프 된 경우 작은 따옴표를 포함 할 수 있습니다. – Fabio

+0

예. 그러나 OP의 경우에는 아닙니다. 탈출 할 필요가 없습니다. – Ionut

+0

물론 싱글 큐트에는 작은 따옴표를 포함 할 수 없다고 나와 있습니다. 탈출하면 false가됩니다. – Fabio

2

당신은 따옴표와 약간의 오차가있을하고 모든 시간을 변경하기 때문에 당신이 속성 이름을 모르는 경우 it'not가 비어있는 것으로

$arrData = json_decode($json); 
echo '<select name="Select-box">'; 
foreach($arrData as $key=>$objData){ 
    if(!empty($objData->{'select-box'})) { 
      foreach($objData->{'select-box'} as $select){ 

       echo '<option value="'.$select->optionValue.'">'.$select->selectName.'</option>'; 
      } 
    } 
} 
echo '</select>'; 

//print 
//<select name="select-box"><option value="apple">apple</option><option value="banana">banana</option><option value="kiwi">kiwi</option></select> 

live sample

을 따르는 경우 또한 당신은 당신의 중첩 된 JSON에서 반복 할 필요가 다음과 같이 할 수

$arrData = json_decode($json); 
echo '<select name="select-box">'; 
foreach($arrData as $key=>$objData){ 
    foreach($objData as $data) { 
     if(is_array($data)) { 
      foreach($data as $select){ 

        echo '<option value="'.$select->optionValue.'">'.$select->selectName.'</option>'; 
      } 
     } 
    } 
} 

live sample

+0

처럼 보일 수 있습니다. 그 시나리오에서'select-box'에'dynamic' 이름이 있다면 어떻게 할 수 있습니까? 예를 들어 'select-box'대신에'veg'이고, 어떻게 동적으로 할 수 있습니까? –

+0

@DilipG 요청에 대한 답을 업데이트했습니다. – Fabio

0
$arrData = json_decode($json, TRUE); 
echo '<select name="">'; 
foreach($arrData as $key=>$objData){ 
    foreach($objData['select-box'] as $key2=>$objData2){ 
       echo '<option value='.$objData2['optionValue'].'>'.$objData2['selectName'].'</option>'; 
    } 
} 
echo '</select>'; 
관련 문제