Cómo convertir una cadena JSON en una matriz
Lo que quiero hacer es lo siguiente:
- tomando JSON como entrada del área de texto en php
- use esta entrada, conviértala a JSON y pásela a php curl para enviar la solicitud.
esto estoy llegando a php desde get of api esta cadena json que quiero pasar a json pero no se está convirtiendo a una 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 devuelve la matriz.
Si pasa el JSON en su publicación json_decode
, fallará. Las cadenas JSON válidas tienen claves entrecomilladas:
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.
Prueba esto:
$data = json_decode($your_json_string, TRUE);
el segundo parámetro convertirá la cadena json decodificada en matrices asociativas.
Si obtiene la cadena JSON del formulario usando $_REQUEST
, $_GET
o $_POST
necesitará usar la función html_entity_decode()
. No me di cuenta de esto hasta que hice una var_dump
comparación de lo que había en la solicitud versus lo que copié en una echo
declaración 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;
Utilice json_decode($json_string, TRUE)
la función 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 decodificada en una matriz asociativa.
============
Producción:
var_dump($my_array_data);
array(5) {
["a"] => int(1)
["b"] => int(2)
["c"] => int(3)
["d"] => int(4)
["e"] => int(5)
}
Si obtiene una cadena json de la URL usando 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));