невозможно получить индекс в массиве json в codeigniter - PullRequest
0 голосов
/ 27 апреля 2020

Я пытаюсь получить массив json в codeigniter с индексом, но не могу получить ожидаемый результат. Пожалуйста, кто-нибудь поможет мне создать массив json, включающий индексы, показанные в следующем ожидаемом массиве.

Я попробовал следующий код

мой код контроллера


public function returnDepartments()
  {
    $departments = $this->search_model->departmentsjson();
    $return_json = array();

    foreach ($departments as $department) {
      $return_json [] = [
        'id'=>$department->id,
        'departmentTitle' => $department->name,
        'icon'=> base_url().'public/contents/img/groups/'.$department->image,
        'allSubjects'=> $department->courses,
        'lecturesCount' => $department->links
      ];
    }

   $json_array= str_replace(array("[","]"),"",htmlspecialchars(stripslashes(json_encode(array('departments'=>$return_json))),ENT_NOQUOTES));
   echo $json_array;

  }

мой код модели

public function departmentsjson()
  {
    $this->db->select('gp.*,count(gc.id) as "courses",count(cl.id) as "links"');
    $this->db->from('group_departments gp');
    $this->db->join('group_courses gc','gp.id = gc.group_id','left');
    $this->db->join('course_links cl','gc.id = cl.course_id','left')->group_by('gp.id');
    return $this->db->get()->result();
  }

* получение json*

{
  "departments":{ "0": {
    "id": "1",
    "departmentTitle": "Basic & Health Sciences",
    "icon": "public/contents/img/groups/basic_n_helth.jpg",
    "allSubjects": "10608",
    "lecturesCount": "10594"
  },
  "1":{
    "id": "2",
    "departmentTitle": "Applied Sciences",
    "icon": "public/contents/img/groups/applied_sciense.jpg",
    "allSubjects": "3806",
    "lecturesCount": "3800"
  },
  "2":{
    "id": "3",
    "departmentTitle": "Social Sciences & Humanities",
    "icon": public/contents/img/groups/social_sciences.jpg",
    "allSubjects": "26365",
    "lecturesCount": "26322"
  }
}
}

Ожидается Json

{
  "departments": {
    "id": "1",
    "departmentTitle": "Basic & Health Sciences",
    "icon": "public/contents/img/groups/basic_n_helth.jpg",
    "allSubjects": "10608",
    "lecturesCount": "10594"
  },
  {
    "id": "2",
    "departmentTitle": "Applied Sciences",
    "icon": "public/contents/img/groups/applied_sciense.jpg",
    "allSubjects": "3806",
    "lecturesCount": "3800"
  },
  {
    "id": "3",
    "departmentTitle": "Social Sciences & Humanities",
    "icon": "public/contents/img/groups/social_sciences.jpg",
    "allSubjects": "26365",
    "lecturesCount": "26322"
  }
}

Пожалуйста, помогите мне решить эту проблему. Как я могу получить мой ожидаемый json массив

Ответы [ 2 ]

0 голосов
/ 27 апреля 2020

Я не уверен, что и получение, и ожидание json действительны.

Ваше получение json должно быть

{"departments": {
    "id": "1",
    "departmentTitle": "Basic & Health Sciences",
    "icon": "public/contents/img/groups/basic_n_helth.jpg",
    "allSubjects": "10608",
    "lecturesCount": "10594"
  }, ……
}

Потому что только [ и ] могут быть удалены

Ваш ожидается json должен быть примерно таким:

{
"departments": [ {…},{…} …]
}

Итак, просто удалите str_replace

$json_array= json_encode(array("departments" => $return_json));
echo $json_array;

Редактировать: Если вам нужно что-то вроде следующего

{ "departments":{ "0":{....}, "1":{...} } }

Вы можете попробовать

$json_array= json_encode(array("departments" => (object) $return_json));
echo $json_array;
0 голосов
/ 27 апреля 2020

Ожидается JSON

{
  "departments": {
    "id": "1",
    "departmentTitle": "Basic & Health Sciences",
    "icon": "public/contents/img/groups/basic_n_helth.jpg",
    "allSubjects": "10608",
    "lecturesCount": "10594"
  },
  {
    "id": "2",
    "departmentTitle": "Applied Sciences",
    "icon": "public/contents/img/groups/applied_sciense.jpg",
    "allSubjects": "3806",
    "lecturesCount": "3800"
  },
  {
    "id": "3",
    "departmentTitle": "Social Sciences & Humanities",
    "icon": "public/contents/img/groups/social_sciences.jpg",
    "allSubjects": "26365",
    "lecturesCount": "26322"
  }
}

Действительный JSON

{
   "departments":[
      {
         "id":"1",
         "departmentTitle":"Basic & Health Sciences",
         "icon":"public/contents/img/groups/basic_n_helth.jpg",
         "allSubjects":"10608",
         "lecturesCount":"10594"
      },
      {
         "id":"2",
         "departmentTitle":"Applied Sciences",
         "icon":"public/contents/img/groups/applied_sciense.jpg",
         "allSubjects":"3806",
         "lecturesCount":"3800"
      },
      {
         "id":"3",
         "departmentTitle":"Social Sciences & Humanities",
         "icon":"public/contents/img/groups/social_sciences.jpg",
         "allSubjects":"26365",
         "lecturesCount":"26322"
      }
   ]
}

И удалить str_replace.

Ваш ожидаемый JSON недействителен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...