如何在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>';