Saeed Heidarizarei
Saeed Heidarizarei

Reputation: 8916

Solve New Line in JSON via PHP

I'm Parsing This json Array and I Want to Take type Object and Put That in New Column type2, and This is one Row of My json Rows, I Get Invalid argument supplied for foreach() Because of New Line in json in Some Rows. How Can I Solve This?

This One is Not Okey

[{"id":"26","answer":[{"option":"4","text":"Hello
"}],"type":"3"}]

AndThis One is Okey

[{"id":"26","answer":[{"option":"4","text":"Hello"}],"type":"3"}]

And This is My Code:

<?php
$con=mysqli_connect("localhost","root","","array");
mysqli_set_charset($con,"utf8");

// Check connection
if (mysqli_connect_errno()){
    echo "Failed to connect to MySQL: " . mysqli_connect_error();
    }

$sql="SELECT `survey_answers`,us_id FROM `user_survey_start`";
if ($result=mysqli_query($con,$sql)){
    while ($row = mysqli_fetch_row($result)){
        $json = $row[0];
        if(!is_null($json)){
            $jason_array = json_decode($json,true);
            // type2
            $type = array();
            foreach ($jason_array as $data) {
                if (array_key_exists('type', $data)) {
                    // Now we will only use it if it actually exists
                    $type[] = $data['type'];
                }
            }         
            // lets check first your $types variable has value or not?
            if(!empty($type)) {
             $types= implode(',',$type); /// implode yes if you got values
            } 
            else { 
                $types = ''; //blank if not have any values
            }
            $sql2="update user_survey_start set type2='$types' where us_id=".$row[1];//run update sql
            echo $sql2."<br>";
            mysqli_query($con,$sql2);
        }
    }
}
mysqli_close($con);
?>

Upvotes: 3

Views: 13200

Answers (2)

B. Desai
B. Desai

Reputation: 16436

Replace your new line with \n before json decode:

$json = preg_replace('/\r|\n/','\n',trim($json));

$jason_array = json_decode($json,true);

Upvotes: 14

Calos
Calos

Reputation: 1942

The problem is invalid JSON format.

If your text content have multi lines, you should be use \n, not typing a enter.

[{"id":"26","answer":[{"option":"4","text":"Hello\n"}],"type":"3"}]
                                                 ^^

Upvotes: 1

Related Questions