2013-04-05 4 views
0

Привет Я использую цикл Еогеасп разобрать каждую строку данных JSon ..Codeigniter - Разбираем каждую строку JSON данных

Что именно Я пытаюсь, чтобы получить данные в формате JSON с точки зрения и затем отправить его в контроллер, где я разбираю каждую строку json, чтобы вставить его в мою базу данных. Я пытаюсь вставить данные, поместив их в цикл и вызвав setCurrentAttendance ($ item), который присутствует в моей модели. Если мой подход неправилен, пожалуйста, дайте мне знать правильный ..

Код РНР:

$data = json_decode($_POST["json"]); 

     var_dump($data); 

     foreach($data as $item){ 
      $this->codegen_model->setCurrentAttendance($item); 
     } 

ПРИМЕЧАНИЕ

$this->codegen_model->setCurrentAttendance($item); 

перенаправляет к моей модели, в которой я пытаюсь передать $ item в виде массива и вставить его в базу данных.

function setCurrentAttendance($data){ 
     $this->db->insert('table_name', $data); 
     if ($this->db->affected_rows() >= '1') 
     { 
      return TRUE; 
     } 

     return FALSE; 
    } 

данные JSON переменной $ данных:

"[{"roll_no":"1101","full_name":"John Smith","dayspresent":"1","totalclasses":"2","percent_att":"50","hasAttended":"P","att_date":"Thu Apr 04 2013","st_class":"1","st_section":"A"}, 
{"roll_no":"1102","full_name":"Ram Puri","dayspresent":"4","totalclasses":"4","percent_att":"100","hasAttended":"P","att_date":"Thu Apr 04 2013 ","st_class":"1","st_section":"A"}]" 

Но я получаю следующее сообщение об ошибке и не в состоянии догадаться, почему ??

<div style="border:1px solid #990000;padding-left:20px;margin:0 0 10px 0;"> 

<h4>A PHP Error was encountered</h4> 

<p>Severity: Warning</p> 
<p>Message: Invalid argument supplied for foreach()</p> 
<p>Filename: controllers/controller_name.php</p> 
<p>Line Number: 245</p> 

</div> 

Пожалуйста, дайте мне знать, где я ошибаюсь.

Заранее спасибо.

UPDATE

JSON закодированные данные:

"[{\"roll_no\":\"1101\",\"full_name\":\"John Smith\",\"dayspresent\":\"1\",\"totalclasses\":\"2\",\"percent_att\":\"\n\t\t\t50\t\t\t\",\"hasAttended\":\"P\",\"att_date\":\"Fri Apr 05 2013 \",\"st_class\":\"1\",\"st_section\":\"A\"},{\"roll_no\":\"1102\",\"full_name\":\"Ram Puri\",\"dayspresent\":\"4\",\"totalclasses\":\"4\",\"percent_att\":\"\n\t\t\t100\t\t\t\",\"hasAttended\":\"A\",\"att_date\":\"Fri Apr 05 2013 \",\"st_class\":\"1\",\"st_section\":\"A\"}]" 
+0

Какие данные вы получаете в $ _POST ["json"] '?? это json закодированные данные? – Mahendra

+0

@Mahendra: Я обновил его .. см. Мое редактирование – NealCaffrey

+0

Эй, я отправил это на ответ, но снял его, потому что я действительно не вижу, как это поможет, но стоит попробовать - попробуйте изменить json_encode на имеют второй параметр как таковой: $ data = json_decode ($ _ POST ['json'], true); Это заставит его быть массивом вместо объекта php. –

ответ

3

Ваш JSON строка недействительна. Он имеет \t и \n в нем, чего он не должен. Вы должны отфильтровать тот первый:

$json = str_replace(array("\t","\n"), "", $_POST["json"]); 
$data = json_decode($json); 

var_dump($data); 

foreach($data as $item) 
{ 
    $this->codegen_model->setCurrentAttendance($item); 
} 

См: this works.

+0

см. Мое обновленное сообщение – NealCaffrey

+0

В чем разница? Вы попробовали то, что я предлагаю? Если вы отфильтровываете '\ n' и' \ t', это отлично работает для меня. – Mischa

+0

Да, я попробовал .. снова, показывая ту же ошибку .. – NealCaffrey

0

Используйте этот код. Это может сработать для вас.

EDIT

обновления кода для печати каждого студента полное имя в качестве примера.

<?php 
$data = '{"students" : [{"roll_no":"1101","full_name":"John Smith","dayspresent":"1","totalclasses":"2","percent_att":"50","hasAttended":"P","att_date":"Fri Apr 05 2013 ","st_class":"1","st_section":"A"},{"roll_no":"1102","full_name":"Ram Puri","dayspresent":"4","totalclasses":"4","percent_att":"100","hasAttended":"A","att_date":"Fri Apr 05 2013 ","st_class":"1","st_section":"A"}]}'; 

$data = json_decode($data); 

     //var_dump($data); 

     foreach($data->students as $item){ 
      print $item->full_name; 
     } 
?> 
+0

Кажется, он не может изменить строку, которую он получает, поэтому это невозможно. – Mischa

+0

@Ummar: Посмотрите на мою заметку. Я передаю $ item в виде массива моей модели, где я вставляю ее в свой db – NealCaffrey

Смежные вопросы