So konvertieren Sie eine JSON-Zeichenfolge in ein Array

123

Was ich tun möchte, ist Folgendes:

  1. JSON als Eingabe aus dem Textbereich in PHP nehmen
  2. Verwenden Sie diese Eingabe und konvertieren Sie sie in JSON und übergeben Sie sie an PHP Curl, um eine Anfrage zu senden.

Dies ist bei PHP von Get of API dieser JSON-String, den ich an JSON übergeben möchte, aber es wird nicht in Array konvertiert

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);

Der obige Code gibt mir kein Array zurück.

XMen
quelle
1
Müssen Sie eine JSON-Zeichenfolge in ein Array konvertieren ODER möchten Sie aus diesen Daten eine URL fälschen? Was genau ist die Frage?
Janis Veinbergs
then it is not givingNicht was geben? Sie nehmen eine JSON-formatierte Zeichenfolge aus dem Textbereich und konvertieren sie in JSON ???
PeeHaa
1
Wenn Sie den obigen json in meiner Frage json_decode (, true) ausführen, wird ein Array erneut
abgestimmt
@ Pekka Bitte überprüfen Sie meine Frage noch einmal.
XMen
3
Dies war ein ungültiges JSON-Problem.
XMen

Antworten:

187

Wenn Sie den JSON in Ihrem Beitrag an übergeben json_decode, schlägt dies fehl. Gültige JSON-Zeichenfolgen haben Schlüssel in Anführungszeichen:

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
quelle
Wenn Sie den obigen json in meiner Frage json_decode (, true) ausführen, wird ein Array erneut
abgestimmt
@RahulMehta Wenn Sie das integrierte PHP verwenden, json_decode()wird es zurückgegeben, NULLwenn Ihr JSON ungültig ist (z. B. keine Schlüssel in Anführungszeichen). Das steht in der Dokumentation und das gibt meine PHP 5.2-Installation zurück. Verwenden Sie eine andere Funktion als die offizielle, integrierte json_decode()? Was kommt var_dump(json_decode($str, true));zurück?
RickN
Nach json_encoding möchte ich jedes einzelne json-Objekt, z. B. {foo: "bar"}, als Objekt im Array lesen. Wie kann ich aus den json_encoded-Daten ein Array erstellen, um jedes json-Objekt zu lesen? @ RikkusRukkus
Manny265
@ Manny265, das klingt nach etwas, das seine eigene Frage verdient, mit (1) einem Beispielcode, (2) dem, was Sie bisher versucht haben, und (3) dem erwarteten Ergebnis und nicht diesem Kommentarbereich.
RickN
96

Versuche dies:

$data = json_decode($your_json_string, TRUE);

Der zweite Parameter macht einen decodierten JSON-String zu einem assoziativen Array.

Sepidol
quelle
30

Wenn Sie den JSON - String aus dem Formular werden immer mit $_REQUEST, $_GEToder $_POSTdie Sie benötigen , um die Funktion zu verwenden html_entity_decode(). Ich habe dies erst bemerkt, als ich eine var_dumpder echoAngaben in der Anfrage im Vergleich zu den Anweisungen und Anweisungen gemacht habe und festgestellt habe, dass die Anforderungszeichenfolge viel größer war.

Der richtige Weg:

$jsonText = $_REQUEST['myJSON'];
$decodedText = html_entity_decode($jsonText);
$myArray = json_decode($decodedText, true);

Mit Fehlern:

$jsonText = $_REQUEST['myJSON'];
$myArray = json_decode($jsonText, true);
echo json_last_error(); //Returns 4 - Syntax error;
jbeauchamp
quelle
2
Perfekt, das funktioniert. Wenn ich Daten von der $ _POST-Funktion erhalte, war json_last_error () = zu JSON_ERROR_SYNTAX. aber alles war in Ordnung. Es war ein Decodierungsfehler, kein Codierungsfehler wie ascii oder utf8. DANKE
11

Verwenden Sie die json_decode($json_string, TRUE)Funktion, um das JSON-Objekt in ein Array zu konvertieren.

Beispiel:

$json_string   = '{"a":1,"b":2,"c":3,"d":4,"e":5}';

$my_array_data = json_decode($json_string, TRUE);

HINWEIS: Der zweite Parameter konvertiert dekodierte JSON-Zeichenfolgen in ein assoziatives Array.

===========

Ausgabe:

var_dump($my_array_data);

array(5) {

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

Wenn Sie eine JSON-Zeichenfolge von der URL erhalten file_get_contents, führen Sie die folgenden Schritte aus:

$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
quelle
6

Ihre Zeichenfolge sollte das folgende Format haben:

$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);

Ausgabe:

Array
 (
    [action] => create
    [record] => Array
        (
            [type] => n$product
            [fields] => Array
                (
                    [n$name] => Bread
                    [n$price] => 2.11
                )

            [namespaces] => Array
                (
                    [my.demo] => n
                )

        )

)
Dinanath Thakur
quelle
2

Sie können json Object in Array & String konvertieren.

$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
quelle
1

Wenn Sie jemals JSON-Dateien oder -Strukturen in Arrays im PHP-Stil mit allen Verschachtelungsebenen konvertieren müssen, können Sie diese Funktion verwenden. Zuerst müssen Sie json_decode ($ yourJSONdata) und dann an diese Funktion übergeben. Es gibt die richtigen Arrays im PHP-Stil an Ihr Browserfenster (oder Ihre Konsole) aus.

https://github.com/mobsted/jsontophparray

Denis Volkov
quelle
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);

?>

Ich denke, das sollte funktionieren, es ist nur so, dass die Schlüssel auch in doppelten Anführungszeichen stehen sollten, wenn sie keine Ziffern sind.

Pradeep Dhawan
quelle
1

das ist meine lösung: 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}]"

Also benutze ich json_decode zweimal so:

$js_column_validation = json_decode($columns_validation);
$js_column_validation = json_decode($js_column_validation); 

var_dump($js_column_validation);

und das Ergebnis ist:

 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
quelle
Danke Bruder ... du hast meinen Tag gerettet
Nuwan Withanage
1

Stellen Sie sicher, dass die Zeichenfolge das folgende JSON-Format hat:

{"result":"success","testid":"1"} (with " ") .

Wenn nicht, können Sie "responsetype => json"Ihre Anforderungsparameter hinzufügen.

Verwenden Sie dann json_decode($response,true), um es in ein Array zu konvertieren.

unpokkolokko
quelle
1
Willkommen bei StackOverflow :-) Die Community freut sich immer über neue Mitglieder, die dazu beitragen möchten, und schätzt Ihre Einstellung. Leider dachte ein anderes Mitglied, dass Ihre Antwort eine Ablehnung verdient. Dies könnte daran liegen, dass die Frage selbst vor etwa sieben Jahren gestellt und bereits mehrmals beantwortet wurde. Darüber hinaus wird die responseTypeEigenschaft verwendet, um den Datentyp in der Antwort auf die Anforderung zu bestimmen. Das Problem ist jedoch, dass der Anforderungshauptteil Daten enthält, die nicht korrekt sind. Ihre Antwort passt daher nicht zum gegebenen Kontext.
Philipp Maurer
1

Sie können eine Zeichenfolge wie folgt in JSON ändern und bei Bedarf auch die Zeichenfolge zuschneiden und abstreifen.

$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
quelle
0

Verwenden Sie diesen Konverter. Er schlägt überhaupt nicht fehl: 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
quelle
-2
$data = json_encode($result, true);

echo $data;
Viktor
quelle
2
Während dieser Code die Frage möglicherweise beantwortet, verbessert die Bereitstellung eines zusätzlichen Kontexts darüber, warum und / oder wie dieser Code die Frage beantwortet, ihren langfristigen Wert.
Rollstuhlfahrer