2017-02-23 41 views
0

Я PARSING Этого JSon массива, и я хочу взять type объект и положить, что в Нью-Column type2, и это один ряд моих JSon Рядов, I Get Недействительного аргумента foreach() Из-за новой строки в json в некоторых строках. Как я могу это решить?Решить новую строку в формате JSON с помощью PHP

этот не Окей

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

AndThis Один Окей

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

И Это мой код:

<?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); 
?> 
+1

** ПРЕДУПРЕЖДЕНИЕ ** При использовании 'mysqli' вы должны использовать [параметризованные запросы] (HTTP: // PHP. net/manual/en/mysqli.quickstart.prepared-statements.php) и ['bind_param'] (http://php.net/manual/en/mysqli-stmt.bind-param.php), чтобы добавить данные пользователя в Ваш запрос. ** НЕ используйте ** интерполирование строк или конкатенацию для выполнения этого, потому что вы создали серьезную [SQL-инъекцию] (http://bobby-tables.com/). ** НИКОГДА не ставьте данные '$ _POST' или' $ _GET' непосредственно в запрос, это может быть очень вредно, если кто-то пытается использовать вашу ошибку. – tadman

ответ

1

Замените новую строку с \ п до того JSon расшифровывает:

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

$jason_array = json_decode($json,true); 
+0

Решенный, вы Awsomeeeeeeeee, appriciate It –

1

Проблема Недопустимый формат JSON.

Если ваше текстовое содержимое имеет несколько строк, вы должны использовать \n, не вводив ввод.

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

Этот json - это Описательный Азот Вопросов, и Пользователи ввели. У меня слишком много строк, что мне делать? –

+0

@SedricHeidarizarei Для одного, упростите заглавные буквы. Если вам нужны данные с объемной загрузкой, можно ли их вручную отредактировать или есть слишком много? Есть ли образец ошибок? – tadman

+1

@SedricHeidarizarei Заменить все символы EOF на '\ n' перед записью магазина или выполнить' json_decode() '. –