Tengo datos json complejos. Puede estar en cualquiera de los formatos de la siguiente manera:
1. {"Physics":{"5b87ceb691":"Motion","5b87ce3e":"Mass"}} //where value itself is a json 2. {"a60a8001805":"Finish chapter 1","a60a8002ab0":"Finish assignments"} //simple key value pair Quiero crear casillas de verificación para todos los valores ( Motion , Mass , Finish chapter 1 , Finish assignments para los ejemplos anteriores) y las claves deben aparecer como texto entre esas casillas de verificación ( Physics para el ejemplo anterior) (La clave debe aparecer como texto solo si su valor es un objeto json, dado que el valor de Physics es un json, Physics debería mostrarse como un texto y en el ejemplo 2, dado que no existen claves cuyo valor sea un objeto json, ninguna clave se mostrará como un texto).
He implementado esto en javascript de la siguiente manera:
var str = ""; if(Object.keys(data).length !== 0) { var i = 1; for (var key in data) { if (data.hasOwnProperty(key)) { var val = data[key]; if(typeof val == 'object') { str += '<div class = "data_text hidden">' + key + '</div>'; for (var subKey in val) { if (val.hasOwnProperty(subKey)) { var subValue = val[subKey]; str += '<div class="db-checkbox data_options hidden"><input type="checkbox" name="abc" id="' + i + '"><label for="' + i + '">' + subValue + '</label></div>' i += 1; } } } else { str += '<div class="db-checkbox data_options hidden"><input type="checkbox" name="abc" id="' + i + '"><label for="' + i + '">' + val + '</label></div>' i += 1; } } } Ahora, quiero hacer lo mismo en php. Busqué para encontrar la forma de acceder a los datos json en php, pero todo eso funciona solo cuando se conocen las claves. (Por ejemplo, data->a60a8002ab0 ) Pero quiero hacer esto de forma genérica. No quiero codificar nada. ¿Cómo puedo hacer esto? Gracias.
Pruebe json_decode en modo asociativo pasando el segundo parámetro verdadero para que devuelva una matriz asociativa que pueda recorrer, similar a su código javascript.
//try each of the following by comment/uncomment //$myjson = '{"Physics":{"5b87ceb691":"Motion","5b87ce3e":"Mass"}}'; //$myjson = '{"a60a8001805":"Finish chapter 1","a60a8002ab0":"Finish assignments"}'; $myjson = '{"a60a8001805":"Finish chapter 1","a60a8002ab0":"Finish assignments","Physics":{"5b87ceb691":"Motion","5b87ce3e":"Mass"}}'; $json_md_ary = json_decode($myjson,true); $i=1; foreach($json_md_ary as $key=>$val){ if (is_array($val)){ echo $key, "<br>"; foreach($val as $k=>$v){ echo $k, ' => ' ,$v,'<input type="checkbox" name="abc" id="'.$i.'">',"<br>"; $i++; } }else{ echo $key, ' => ' ,$val,'<input type="checkbox" name="abc" id="'.$i.'">',"<br>"; $i++; } }$jsondata = '{"Physics":{"5b87ceb691":"Motion","5b87ce3e":"Mass"}}'; $data = json_decode($jsondata); foreach($data as $key => $val){ print_r($val); }