Zur Zeit sieht mein JSON so aus:

[{
    "user_review_ids": {
        "category": "cat1",
        "name": "name1",
        "phone": "phone1",
        "comment": "com1",
        "reviewid": 32
    }
}, {
    "user_review_ids": {
        "category": "cat2",
        "name": "name2",
        "phone": "phone2",
        "comment": "com2",
        "reviewid": 76
    }
}], [{
    "private_review_ids": {
        "category": "cat1",
        "name": "name1",
        "phone": "phone1",
        "comment": "com1",
        "reviewid": 240
    }
}, {
    "private_review_ids": {
        "category": "cat2",
        "name": "name2",
        "phone": "phone2",
        "comment": "com2",
        "reviewid": 241
    }
}]

Welches ... ist nicht korrekt JSON. Jsonlint.com wird dir das sagen.

So sollte es sein:

[{
    "user_review_ids": [{
        "category": "cat1",
        "name": "name1",
        "phone": "phone1",
        "comment": "com1",
        "reviewid": 32
    }, {
        "category": "cat2",
        "name": "name2",
        "phone": "phone2",
        "comment": "com2",
        "reviewid": 76
    }],
    "private_review_ids": [{
        "category": "cat1",
        "name": "name1",
        "phone": "phone1",
        "comment": "com1",
        "reviewid": 240
    }, {
        "category": "cat2",
        "name": "name2",
        "phone": "phone2",
        "comment": "com2",
        "reviewid": 241
    }]
}]

Können Sie mir sagen, was ich mit meinem php Code tun muss, damit er den richtigen JSON ausgibt?

Der aktuelle Code lautet:

<?php
    require('file.php');

    $UserReviewID = ('32,76');
    $UserReviewID = explode(",",$UserReviewID);

    $PrivateReviewID = ('240,241');
    $PrivateReviewID = explode(",",$PrivateReviewID);

    //for user_review_ids
    $results = array();

    //for private_review_ids
    $results2 = array();

    foreach($UserReviewID as $UserReviewID) {
        $sql2 = "SELECT * FROM review WHERE review_id = ?";
        $stmt2 = $con->prepare($sql2) or die(mysqli_error($con));
        $stmt2->bind_param('i', $UserReviewID) or die ("MySQLi-stmt binding failed ".$stmt2->error);
        $stmt2->execute() or die ("MySQLi-stmt execute failed ".$stmt2->error);
        $result2 = $stmt2->get_result();

        while($row = mysqli_fetch_array($result2)) {//make an array called $results
            $results[] = array('user_review_ids' => array(
                'category' => $row['cat_name'],
                'name' => $row['name'],
                'phone' => $row['phone'],
                'comment' => $row['comment'],
                'reviewid' => $row['review_id'],
            ));
        }
    }

        foreach($PrivateReviewID as $PrivateReviewID) {
        $sql2 = "SELECT * FROM review WHERE review_id = ?";
        $stmt2 = $con->prepare($sql2) or die(mysqli_error($con));
        $stmt2->bind_param('i', $PrivateReviewID) or die ("MySQLi-stmt binding failed ".$stmt2->error);
        $stmt2->execute() or die ("MySQLi-stmt execute failed ".$stmt2->error);
        $result2 = $stmt2->get_result();

        while($row = mysqli_fetch_array($result2)) {//make an array called $results2
            $results2[] = array('private_review_ids' => array(
                'category' => $row['cat_name'],
                'name' => $row['name'],
                'phone' => $row['phone'],
                'comment' => $row['comment'],
                'reviewid' => $row['review_id'],
            ));
        }
    }

        echo json_encode($results) .",";
        echo json_encode($results2);
?>
0
CHarris 19 Apr. 2018 im 00:26

4 Antworten

Beste Antwort

Das Verketten der Ausgaben mehrerer json_encode-Operationen erzeugt keinen gültigen JSON. Sie müssen eine Datenstruktur erstellen, mit der Sie json_encode einmal ausführen und alles darin einschließen können.

Um die angezeigte Struktur zu erhalten, müssen Sie außerdem ändern, wie Sie die aus den Datenbankzeilen resultierenden Arrays erstellen. Sie erstellen mehrere Elemente mit demselben Index.

Das sollte funktionieren:

<?php
    require('file.php');

    $UserReviewID = ('32,76');
    $UserReviewID = explode(",",$UserReviewID);

    $PrivateReviewID = ('240,241');
    $PrivateReviewID = explode(",",$PrivateReviewID);

    //for user_review_ids
    $results = array();

    //for private_review_ids
    $results2 = array();

    foreach($UserReviewID as $UserReviewID) {
        $sql2 = "SELECT * FROM review WHERE review_id = ?";
        $stmt2 = $con->prepare($sql2) or die(mysqli_error($con));
        $stmt2->bind_param('i', $UserReviewID) or die ("MySQLi-stmt binding failed ".$stmt2->error);
        $stmt2->execute() or die ("MySQLi-stmt execute failed ".$stmt2->error);
        $result2 = $stmt2->get_result();

        while($row = mysqli_fetch_array($result2)) {//make an array called $results
            $results[] = array(
                'category' => $row['cat_name'],
                'name' => $row['name'],
                'phone' => $row['phone'],
                'comment' => $row['comment'],
                'reviewid' => $row['review_id'],
            ));
        }
    }

        foreach($PrivateReviewID as $PrivateReviewID) {
        $sql2 = "SELECT * FROM review WHERE review_id = ?";
        $stmt2 = $con->prepare($sql2) or die(mysqli_error($con));
        $stmt2->bind_param('i', $PrivateReviewID) or die ("MySQLi-stmt binding failed ".$stmt2->error);
        $stmt2->execute() or die ("MySQLi-stmt execute failed ".$stmt2->error);
        $result2 = $stmt2->get_result();

        while($row = mysqli_fetch_array($result2)) {//make an array called $results2
            $results2[] = array(
                'category' => $row['cat_name'],
                'name' => $row['name'],
                'phone' => $row['phone'],
                'comment' => $row['comment'],
                'reviewid' => $row['review_id'],
            ));
        }
    }

    $combinedResults = array(array('user_review_ids' => $results, 'private_review_ids' => $results2));
    echo json_encode($combinedResults);
?>

Trotzdem bin ich nicht davon überzeugt, dass Sie tatsächlich das äußerste Array in Ihrem Beispielergebnis benötigen. Es scheint nicht viel Sinn zu haben, da es nur ein festes Element enthält. Wenn Sie das loswerden wollten, dann wäre die vorletzte Zeile

    $combinedResults = array('user_review_ids' => $results, 'private_review_ids' => $results2);

Stattdessen wird nur ein einzelnes Objekt mit diesen Feldnamen zurückgegeben.

2
ADyson 18 Apr. 2018 im 21:46

Ich denke, Sie müssen nur ein einzelnes Array json_encode. Vielleicht so etwas wie:

echo json_encode( array_merge($results, $results2) );
1
Andrew Chart 18 Apr. 2018 im 21:33

Anstatt von

 echo json_encode($results) .",";
 echo json_encode($results2);

Verwenden

echo json_encode(array_merge($results,$results2));
1
CFP Support 18 Apr. 2018 im 21:34

Sie können die eingebaute PHP-Funktion json_encode () verwenden Beispiel:

<?php
$pdo = new PDO("mysql:dbname=database;host=127.0.0.1", "user", "password");
$statement = $pdo->prepare("SELECT * FROM table");
$statement->execute();
$results = $statement->fetchAll(PDO::FETCH_ASSOC);
$json = json_encode($results);

Viel Glück !

-2
Diego Avila 18 Apr. 2018 im 21:30