Cómo convertir una cadena JSON a una matriz

123

Lo que quiero hacer es lo siguiente:

  1. tomando JSON como entrada del área de texto en php
  2. use esta entrada y conviértala a JSON y páselo a php curl para enviar la solicitud.

estoy llegando a php desde get de api esta cadena json que quiero pasar a json pero no se está convirtiendo en 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.

X Men
fuente
1
¿Necesita convertir una cadena json en una matriz O desea falsificar una URL a partir de esos datos? Cuál es exactamente la pregunta?
Janis Veinbergs
then it is not giving¿No dar qué? ¿Toma una cadena con formato JSON de textarea y la convierte a JSON?
PeeHaa
1
si lo hace el JSON más arriba en mi pregunta json_decode (, cierto) lo hace Retuns una matriz
X-Men
@Pekka Por favor revise mi pregunta nuevamente.
XMen
3
problema json inválido esto era.
XMen

Respuestas:

187

Si le pasa el JSON en su publicación json_decode, fallará. Las cadenas JSON válidas tienen claves entre comillas:

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.
RickN
fuente
si lo hace el JSON más arriba en mi pregunta json_decode (, cierto) lo hace Retuns una matriz
X-Men
@RahulMehta Si está utilizando el PHP incorporado json_decode(), regresará NULLsi su JSON no es válido (por ejemplo, no hay claves entre comillas). Eso es lo que dice la documentación y eso es lo que devuelve mi instalación de PHP 5.2. ¿Está utilizando una función distinta de la oficial, incorporada json_decode()? ¿Qué var_dump(json_decode($str, true));devuelve?
RickN
después de json_encoding, me gustaría leer cada objeto json individual, por ejemplo, {foo: "bar"} como un objeto en la matriz. ¿Cómo puedo crear una matriz a partir de los datos codificados en json para leer cada objeto json? @RikkusRukkus
Manny265
@ Manny265 que suena como algo que merece su propia pregunta con (1) algún código de muestra, (2) lo que ha intentado hasta ahora y (3) el resultado esperado, en lugar de esta sección de comentarios.
RickN
96

Prueba esto:

$data = json_decode($your_json_string, TRUE);

el segundo parámetro convertirá la cadena json decodificada en matrices asociativas.

sepidol
fuente
30

Si usted está recibiendo la cadena JSON desde el formulario utilizando $_REQUEST, $_GETo $_POSTla que tendrá que utilizar la función html_entity_decode(). No me di cuenta de esto hasta que hice una var_dumpde lo que estaba en la solicitud versus lo que copié y la echodeclaración y noté que la cadena de solicitud era mucho más grande.

Forma 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;
jbeauchamp
fuente
2
Perfecto, esto funciona. cuando obtengo datos de la función $ _POST json_last_error () was = to JSON_ERROR_SYNTAX. pero todo estuvo bien. Fue un error de decodificación, no un error de codificación como ascii o utf8. GRACIAS
11

Use la json_decode($json_string, TRUE)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.

===========

Salida:

var_dump($my_array_data);

array(5) {

    ["a"] => int(1)
    ["b"] => int(2)
    ["c"] => int(3)
    ["d"] => int(4)
    ["e"] => int(5)
}
Arslan Ramay
fuente
6

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));
piyush
fuente
6

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
                )

        )

)
Dinanath Thakur
fuente
2

Puede convertir json Object en Array & String.

$data='{"resultList":[{"id":"1839","displayName":"Analytics","subLine":""},{"id":"1015","displayName":"Automation","subLine":""},{"id":"1084","displayName":"Aviation","subLine":""},{"id":"554","displayName":"Apparel","subLine":""},{"id":"875","displayName":"Aerospace","subLine":""},{"id":"1990","displayName":"Account Reconciliation","subLine":""},{"id":"3657","displayName":"Android","subLine":""},{"id":"1262","displayName":"Apache","subLine":""},{"id":"1440","displayName":"Acting","subLine":""},{"id":"710","displayName":"Aircraft","subLine":""},{"id":"12187","displayName":"AAC","subLine":""}, {"id":"20365","displayName":"AAT","subLine":""}, {"id":"7849","displayName":"AAP","subLine":""}, {"id":"20511","displayName":"AACR2","subLine":""}, {"id":"28585","displayName":"AASHTO","subLine":""}, {"id":"45191","displayName":"AAMS","subLine":""}]}';

$b=json_decode($data);

$i=0;
while($b->{'resultList'}[$i])
{
    print_r($b->{'resultList'}[$i]->{'displayName'});
    echo "<br />";
    $i++;
}
Manav Akela
fuente
1

Si alguna vez necesita convertir archivos o estructuras JSON en matrices de estilo PHP, con todos los niveles de anidación, puede usar esta función. Primero, debe json_decode ($ yourJSONdata) y luego pasarlo a esta función. Producirá en la ventana de su navegador (o consola) las matrices de estilo PHP correctas.

https://github.com/mobsted/jsontophparray

Denis Volkov
fuente
1
<?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 claves también deben estar entre comillas dobles si no son números.

Pradeep Dhawan
fuente
1

esta es mi solución: cadena json $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}]"

entonces 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 }
Mourad MAMASSI
fuente
Gracias hermano ... me salvaste el día
Nuwan Withanage
1

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"sus parámetros de solicitud.

Luego use json_decode($response,true)para convertirlo en una matriz.

unpokkolokko
fuente
1
Bienvenido a StackOverflow :-) La comunidad siempre está feliz por los nuevos miembros que desean contribuir y aprecia su actitud. Lamentablemente, otro miembro pensó que su respuesta merece un voto negativo. Esto podría ser, porque la pregunta en sí se hizo hace unos siete años y ya fue respondida varias veces. Además, la responseTypepropiedad se utiliza para determinar el tipo de datos en la respuesta a la solicitud. Sin embargo, el problema es que el cuerpo de la solicitud contiene datos que no están en la forma correcta. Su respuesta por lo tanto no se ajusta al contexto dado.
Philipp Maurer
1

Puede cambiar una cadena a JSON de la siguiente manera y también puede recortar, pelar en 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;
Shahrukh Anwar
fuente
0

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);
Farhad Sakhaei
fuente
-2
$data = json_encode($result, true);

echo $data;
Viktor
fuente
2
Si bien este código puede responder a la pregunta, proporcionar un contexto adicional con respecto a por qué y / o cómo responde a la pregunta mejora su valor a largo plazo.
rollstuhlfahrer