如何在PHP中解析嵌套JSON

如何在PHP中解析嵌套JSON,php,json,Php,Json,我有一个复杂的JSON,我想在PHP中解析它,这样我就可以构建下拉列表 我想将下拉列表构造为 <select name="select-box"> <option value="apple">apple</option> <option value="banana">banana</option> <option value="kiwi">kiwi</option> </select&g

我有一个复杂的
JSON
,我想在
PHP
中解析它,这样我就可以构建
下拉列表

我想将下拉列表构造为

<select name="select-box">
  <option value="apple">apple</option>
    <option value="banana">banana</option>
    <option value="kiwi">kiwi</option>
</select>
我感兴趣的是上面的
JSON

{
          "select-box":[
             {
                "selectName":"apple",
                "optionValue":"apple"
             },
             {
                "selectName":"banana",
                "optionValue":"banana"
             },
             {
                "selectName":"kiwi",
                "optionValue":"kiwi"
             }
          ]
       }
但是我不想单独解析这个。相反,我想解析整个
JSON

$arrData    =  json_decode($json);
  echo '<select name=''>';
    foreach($arrData as $key=>$objData){
      echo '<option value='".$objData->selectName."'>'.$objData->selectName.'</option>';
    }
echo '</select>';
$arrData=json\u decode($json);
回声';
foreach($arrdatas$key=>$objData){
回显“”。$objData->selectName。“;
}
回声';

您可以将true作为第二个参数传递给json_decode,以将数据作为数组而不是对象返回。然后您可以执行以下操作:

// 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>';
//解码所有JSON字符串并存储到变量中
$decodedJson=json\u decode($json,true);
//从所有解码的JSON数据中仅检索与选择框相关的数据
$selectOptions=$decodedJson[2]['select-box'];
回声';
foreach($selectOptions作为$selectOption){
回显“”。$selectOption['selectName'].';
}
回声';
此外,我还复制了您在每个选项上使用“selectName”值作为选择框选项值和名称时所做的操作。不确定是否要将其更改为使用“optionValue”值,但我想我会提高它以防万一


希望这有帮助

您的代码中有一些错误,如:

echo'

应该是:

echo'

您可以将对象转换为数组并按如下方式解析它:

<?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>';

引号中有一些错误,如果嵌套的json不是空的,还需要迭代,如下所示

$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>
$arrData=json\u decode($json);
回声';
foreach($arrdatas$key=>$objData){
如果(!empty($objData->{'select-box'})){
foreach($objData->{'select-box}作为$select){
回显“”。$select->selectName。“;
}
}
}
回声';
//印刷品
//阿普莱巴纳奇维

如果您不知道属性名称,因为它一直在更改,您可以按照以下操作

$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>';
             }
        }
    }
}
$arrData=json\u decode($json);
回声';
foreach($arrdatas$key=>$objData){
foreach($objData作为$data){
if(is_数组($data)){
foreach($select数据){
回显“”。$select->selectName。“;
}
}
}
}
$arrData=json\u decode($json,TRUE);
回声';
foreach($arrdatas$key=>$objData){
foreach($objData['select-box']作为$key2=>$objData2){
回显'.$objData2['selectName'].';
}
}
回声';

select标记中实际要显示什么?我需要显示代码中显示的第二个json,但它的结构必须与第一个json类似,但我的json结构将在什么意义上发生动态变化?这将导致什么问题?此
$selectOptions=$decodedJson[2]['select-box']不适用于
动态
值您会一直查找包含“选择框”键的数组吗?这不是真的,它每次都会更改。您有这种解决方案吗?如果单引号是转义的,则可以包含单引号。但不是在OP的情况下。没有必要转义。当然,但是您声明了
单引号不能包含单引号。
如果转义,则为falsethem@Fabio对所以我对我的答案做了一点修改。我希望有帮助。我知道它可能看起来像
,如果在该场景中有
选择框的
动态
名称,我该怎么做呢。例如,它不是
select box
而是
veg
,那么我该怎么做呢dynamically@DilipG我已经按照你的要求更新了我的答案
$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>';
             }
        }
    }
}
$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>';