php - json_decode - Cómo convertir cadena JSON a matriz
json_decode javascript (14)
Asegúrese de que la cadena esté en el siguiente formato JSON, que es algo como esto:
{"result":"success","testid":"1"} (with " ") .
De lo contrario, puede agregar "responsetype => json"
en sus parámetros de solicitud.
Luego use json_decode($response,true)
para convertirlo en una matriz.
Lo que quiero hacer es lo siguiente:
- tomando JSON como entrada desde el área de texto en php
- use esta entrada y conviértala a JSON y páselo a php curl para enviar la solicitud.
este m llegar a php desde obtener api esta cadena json que quiero pasar a json pero no está convirtiendo a matriz
echo $str=''{
action : "create",
record: {
type: "n$product",
fields: {
n$name: "Bread",
n$price: 2.11
},
namespaces: { "my.demo": "n" }
}
}'';
$json = json_decode($str, true);
el código anterior no me está regresando matriz.
Prueba esto:
$data = json_decode($your_json_string, TRUE);
el segundo parámetro convertirá la cadena json descodificada en una matriz asociativa.
Puede cambiar una cadena a JSON de la siguiente manera y también puede recortar, tirar de la cadena si lo desea,
$str = ''[{"id":1, "value":"Comfort Stretch"}]'';
//here is JSON object
$filters = json_decode($str);
foreach($filters as $obj){
$filter_id[] = $obj->id;
}
//here is your array from that JSON
$filter_id;
Si alguna vez necesita convertir archivos o estructuras JSON a matrices de estilo PHP, con todos los niveles de anidamiento, puede usar esta función. Primero, debe json_decode ($ yourJSONdata) y luego pasarlo a esta función. Saldrá a la ventana de su navegador (o consola) las matrices correctas de estilo PHP.
Si obtiene la cadena JSON del formulario usando $_REQUEST
, $_GET
, o $_POST
necesitará la función html_entity_decode()
. No me di cuenta de esto hasta que hice un var_dump
de lo que estaba en la solicitud frente a lo que copié en echo
declaración de echo
y noté que la cadena de solicitud era mucho más grande.
Manera Correcta:
$jsonText = $_REQUEST[''myJSON''];
$decodedText = html_entity_decode($jsonText);
$myArray = json_decode($decodedText, true);
Con errores:
$jsonText = $_REQUEST[''myJSON''];
$myArray = json_decode($jsonText, true);
echo json_last_error(); //Returns 4 - Syntax error;
Si obtiene una cadena json de URL utilizando file_get_contents
, siga los pasos:
$url = "http://localhost/rest/users"; //The url from where you are getting the contents
$response = (file_get_contents($url)); //Converting in json string
$n = strpos($response, "[");
$response = substr_replace($response,"",0,$n+1);
$response = substr_replace($response, "" , -1,1);
print_r(json_decode($response,true));
Si pasa el JSON en su publicación a json_decode
, fallará. Las cadenas JSON válidas tienen claves citadas:
json_decode(''{foo:"bar"}''); // this fails
json_decode(''{"foo":"bar"}'', true); // returns array("foo" => "bar")
json_decode(''{"foo":"bar"}''); // returns an object, not an array.
Utilice este convertidor, no falla en absoluto: Services_Json
// create a new instance of Services_JSON
$json = new Services_JSON();
// convert a complexe value to JSON notation, and send it to the browser
$value = array(''foo'', ''bar'', array(1, 2, ''baz''), array(3, array(4)));
$output = $json->encode($value);
print($output);
// prints: ["foo","bar",[1,2,"baz"],[3,[4]]]
// accept incoming POST data, assumed to be in JSON notation
$input = file_get_contents(''php://input'', 1000000);
$value = $json->decode($input);
// if you want to convert json to php arrays:
$json = new Services_JSON(SERVICES_JSON_LOOSE_TYPE);
Utilice la función json_decode($json_string, TRUE)
para convertir el objeto JSON en una matriz.
Ejemplo:
$json_string = ''{"a":1,"b":2,"c":3,"d":4,"e":5}'';
$my_array_data = json_decode($json_string, TRUE);
NOTA: El segundo parámetro convertirá la cadena JSON descodificada en una matriz asociativa.
===========
Salida:
var_dump($my_array_data);
array(5) {
["a"] => int(1)
["b"] => int(2)
["c"] => int(3)
["d"] => int(4)
["e"] => int(5)
}
esta es mi solución: json string $columns_validation = string(1736) "[{"colId":"N_ni","hide":true,"aggFunc":null,"width":136,"pivotIndex":null,"pinned":null,"rowGroupIndex":null},{"colId":"J_2_fait","hide":true,"aggFunc":null,"width":67,"pivotIndex":null,"pinned":null,"rowGroupIndex":null}]"
así que uso json_decode dos veces así:
$js_column_validation = json_decode($columns_validation);
$js_column_validation = json_decode($js_column_validation);
var_dump($js_column_validation);
y el resultado es:
array(15) { [0]=> object(stdClass)#23 (7) { ["colId"]=> string(4) "N_ni" ["hide"]=> bool(true) ["aggFunc"]=> NULL ["width"]=> int(136) ["pivotIndex"]=> NULL ["pinned"]=> NULL ["rowGroupIndex"]=> NULL } [1]=> object(stdClass)#2130 (7) { ["colId"]=> string(8) "J_2_fait" ["hide"]=> bool(true) ["aggFunc"]=> NULL ["width"]=> int(67) ["pivotIndex"]=> NULL ["pinned"]=> NULL ["rowGroupIndex"]=> NULL }
si quieres convertir tu array a json y viceversa puedes probar http://framework.zend.com/manual/en/zend.json.basics.html
solo usa la clase zend_json
, tiene muchas características bonitas.
su cadena debe estar en el siguiente formato:
$str = ''{"action": "create","record": {"type": "n$product","fields": {"n$name": "Bread","n$price": 2.11},"namespaces": { "my.demo": "n" }}}'';
$array = json_decode($str, true);
echo "<pre>";
print_r($array);
Salida:
Array
(
[action] => create
[record] => Array
(
[type] => n$product
[fields] => Array
(
[n$name] => Bread
[n$price] => 2.11
)
[namespaces] => Array
(
[my.demo] => n
)
)
)
$data = json_encode($result, true);
echo $data;
<?php
$str=''{
"action" : "create",
"record" : {
"type": "$product",
"fields": {
"name": "Bread",
"price": "2.11"
},
"namespaces": { "my.demo": "n" }
}
}'';
echo $str;
echo "<br>";
$jsonstr = json_decode($str, true);
print_r($jsonstr);
?>
Creo que esto debería funcionar, es solo que las teclas también deberían estar entre comillas dobles si no son números.