2016-04-29 4 views
0

Я в настоящее время делаю mcq для медицинского приложения, и я хочу сделать Json из моей базы данных php, но он не работает, кто-то советует мне иметь JSONObject для вопрос и JSONArray для выбора, но я не могу это сделать, и я не понимаю, почему! Я последовал намного учебник, но я не могу понять, почему я не могу сделать это JSON:Я не могу сделать это JSON

{ //This is the JSON i want to make ! 
    "QCM": { 
     "question": "Est-ce que Captain America gagne contre IronMan", 
     "id": "31", 
     "choix": ["Oui", "Non"] 
    } 
} 

Но я не могу, в настоящее время PHP код:

$db = mysqli_connect($host,$user,$pass,$db); 


$questions = $db->query("SELECT question, id FROM question ORDER BY rand() LIMIT 1"); 
while($row = mysqli_fetch_assoc($questions)){ 
    $id=$row['id']; 
    $QCM[] = $row; 

$choix = $db->query("SELECT choix FROM choix WHERE id_question = $id ORDER BY rand()"); 

while ($row = mysqli_fetch_assoc($choix)) { 
    $QCM[] = $row; 

    } 
} 
echo json_encode(array("QCM"=>$QCM)); 

и там это JSON я могу получить этот код:

{ //I don't want this JSON because i can't read the "choix" in my application 
    "QCM": [{ 
     "question": "Est-ce que Batman gagne contre Superman", 
     "id": "30" 
    }, { 
     "choix": "Oui" 
    }, { 
     "choix": "Non" 
    }] 
} 

Я надеюсь, что кто-то может помочь мне, потому что я не могу сделать правильный JSON!

Вот мой JAVA:

try 
         { 
          JSONArray QCM = response.getJSONArray("QCM"); 
          for (int i=0; i<QCM.length(); i++) { 
           JSONObject getQcmObject = QCM.getJSONObject(i); 
           String questionGet = getQcmObject.getString("question"); 
           symptomesQuestions.setText(questionGet); 

           JSONArray CHOIX = response.getJSONArray("choix"); 
           for (int x =0; x<CHOIX.length(); x++){ 
            JSONObject getChoixObject = CHOIX.getJSONObject(x); 
            String choiceGet = getChoixObject.getString("choix") 
            lesChoixButton.setText(choiceGet); 
           } 
          } 

PHP структуры, необходимые для создания примера JSON

$jsonPhp = 
    (object) (array(
     'QCM' => 
      (object) (array(
       'question' => 'Est-ce que Captain America gagne contre IronMan', 
       'id' => '31', 
       'choix' => 
      array (
        0 => 'Oui', 
        1 => 'Non', 
      ), 
    )), 
    )); 

Online tool to compare JSON structures for differences...

Как print_r:

stdClass Object 
(
    [QCM] => stdClass Object 
     (
      [question] => Est-ce que Captain America gagne contre IronMan 
      [id] => 31 
      [choix] => Array 
       (
        [0] => Oui 
        [1] => Non 
       ) 
     ) 
) 
+0

'$ ПКМ [» choix '] [] = $ row [' choix '] 'в вашем втором цикле выборки, затем ... –

+0

Привет, спасибо за попытку помочь, я попробую это, но я получаю этот JSON '{" QCM ": {" 0 ": {" question ":" Est-ce que Batman gagne contre Superman "," id ": «30»}, «choix»: [«Non», «Oui»]}} ' –

+0

' $ QCM = [ "question" => $ row ['question'] "id" => $ row [' id '], «choix» => [$ row [' i dont know what is this]] ] ' –

ответ

1

ли вы попробовать что-то вроде этого:

<?php 

$db   = mysqli_connect($host,$user,$pass,$db); 
$counter = 0; 
$questions = $db->query("SELECT question, id FROM question ORDER BY rand() LIMIT 1"); 
while($row = mysqli_fetch_assoc($questions)){ 
    $id  = $row['id']; 
    $QCM[] = $row; 

    $choix = $db->query("SELECT choix FROM choix WHERE id_question = $id ORDER BY rand()"); 

    $arrTemp= array();  // HERE A TEMPORAL ARRAY 
    while ($row2 = mysqli_fetch_assoc($choix)) { 
     $arrTemp[] = $row2['choix']; 
    } 
    //TRY THIS: 
    $QCM[$counter]["choix"] = $arrTemp; //ADD THE TEMPORAL ARRAY TO THE $QCM ARRAY 
    $counter++; 
} 
echo json_encode(array("QCM"=>$QCM)); 

Я предлагаю вам попробовать это в Java код:

package com.company; 

import org.json.JSONArray; 
import org.json.JSONObject; 


public class Main { 

public static void main(String[] args) { 
    String jsonExample  = "[{\"QCM\":{\"question\":\"Est-ce que Captain America gagne contre IronMan\",\"id\":\"31\",\"choix\":[\"Oui\",\"Non\"]}}, {\"QCM\":{\"question\":\"Do you know who the 1st President of the United States is?\",\"id\":\"32\",\"choix\":[\"Yes\",\"No\"]}}]"; 
    JSONArray jsonArray; 
    try{ 
     jsonArray   = new JSONArray(jsonExample); 

     for(int i = 0; i<jsonArray.length(); i++){ 
      JSONObject tempObject = jsonArray.getJSONObject(i); 
      JSONObject qcmObject = tempObject.getJSONObject("QCM"); 
      String qcmQuestion  = qcmObject.getString("question"); 
      JSONArray qcmChoice  = qcmObject.getJSONArray("choix"); 
      //SET THE TEXT IN THE TEXT FIELD: 
      ////symptomesQuestions.setText(qcmQuestion); 

      //NOW LOOP THROUGH THE ARRAY OF CHOICES AND DO AS YOU WISH WITH THE CONTENT... 
      for(int c=0; c<qcmChoice.length(); c++){ 
       //BECAUSE YOU MAY HAVE MORE THAN 1 CHOICES, YOU MAY HAVE TO CREATE YOUR BUTTONS DYNAMICALLY... 
       //IF YOU SET THE BUTTON TEXT OF lesChoixButton TO ANY VALUE, SUBSEQUENT VALUES IN THE LOOP WILL OVERRIDE IT. 
       //SO DYNAMICALLY CREATE YOUR BUTTONS.... 
       System.out.println(qcmChoice.get(c) + "\n"); // PRINTS Oui Non... AND THEN Yes No 
       ////lesChoixButton.setText(qcmChoice.get(c)); 
      } 

      System.out.print(qcmQuestion); 
      System.out.print("\n\n"); 
      System.out.print(qcmChoice); 
      System.out.print("\n\n"); 

     } 
    }catch (Exception e){ 

    } 
} 
} 

Тест этот код:

package com.company; 

    import org.json.JSONArray; 
    import org.json.JSONObject; 

    import javax.swing.*; 
    import java.awt.*; 


    public class Main extends JFrame{ 

     Main(String g){ 
      super(g);  
     } 

     public static void main(String[] args) { 
      String jsonExample  = "[{\"QCM\":{\"question\":\"Est-ce que Captain America gagne contre IronMan\",\"id\":\"31\",\"choix\":[\"Oui\",\"Non\"]}}, {\"QCM\":{\"question\":\"Do you know who the 1st President of the United States is?\",\"id\":\"32\",\"choix\":[\"Yes\",\"No\"]}}]"; 
      JSONArray jsonArray; 
      try{ 
       jsonArray   = new JSONArray(jsonExample); 
       Main fr    = new Main("QCM QUESTIONS"); 
       fr.setLayout(new GridLayout(10,10)); 
       final JPanel tempPanel  = new JPanel(); 
       tempPanel.setLayout(new GridLayout(4,4)); 

       for(int i = 0; i<jsonArray.length(); i++){ 
        JSONObject tempObject = jsonArray.getJSONObject(i); 
        JSONObject qcmObject = tempObject.getJSONObject("QCM"); 
        String qcmQuestion  = qcmObject.getString("question"); 
        JSONArray qcmChoice  = qcmObject.getJSONArray("choix"); 
        JTextField tempQuest = new JTextField(20); 
        tempQuest.setText(qcmQuestion); 
        fr.add(tempQuest); 

        //SET THE TEXT IN THE TEXT FIELD: 
        ////symptomesQuestions.setText(qcmQuestion); 

        //NOW LOOP THROUGH THE ARRAY OF CHOICES AND DO AS YOU WISH WITH THE CONTENT... 
        for(int c=0; c<qcmChoice.length(); c++){ 
         //BECAUSE YOU MAY HAVE MORE THAN 1 CHOICES, YOU MAY HAVE TO CREATE YOUR BUTTONS DYNAMICALLY... 
         //IF YOU SET THE BUTTON TEXT OF lesChoixButton TO ANY VALUE, SUBSEQUENT VALUES IN THE LOOP WILL OVERRIDE IT. 
         //SO DYNAMICALLY CREATE YOUR BUTTONS.... 
         System.out.println(qcmChoice.get(c) + "\n"); // PRINTS Oui Non... AND THEN Yes No 
         final JButton tempBtn  = new JButton(); 
         tempBtn.setAlignmentX(0); 
         tempBtn.setAlignmentY(20 + 20*c); 
         tempBtn.setSize(new Dimension(150, 30)); 

         tempBtn.setText((String)qcmChoice.get(c)); 
         fr.add(tempBtn); 
         //fr.add(tempBtn); 
         ////lesChoixButton.setText(qcmChoice.get(c)); 
        } 
        final JLabel tempSpacer  = new JLabel(" "); 
        tempSpacer.setText(" "); 
        fr.add(tempSpacer); 

        System.out.print(qcmQuestion); 
        System.out.print("\n\n"); 
        System.out.print(qcmChoice); 
        System.out.print("\n\n"); 

       } 

       fr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       fr.setVisible(true); 
       fr.setSize(300,300); 
      }catch (Exception e){ 

      } 
     } 
    } 
+0

Привет и спасибо за помощь! он не работает actully, не может получить доступ к моему «choix» в моем приложении. –

+0

Я просто обновил ответ. Попробуйте, если это сработает для вашего ... добавлено переменная $ counter. – Poiz

+0

'$ QCM [counter]' должен быть '$ QCM [$ counter]'. – Barmar

0

Просто сделайте самостоятельно заполненные данные (в вашем случае они заполнены из базы данных).

$expected = [ 
    "QCM" => [ 
      "question" => "Est-ce que Captain America gagne contre IronMan", 
      "id"  => "31", 
      "choix" => ["Oui", "Non"] 
     ] 
    ]; 

echo (json_encode($expected , JSON_PRETTY_PRINT)); 

Результат:

enter image description here

Гадание из вашего кода, вероятно:

$QCM = [ 
    "question" => $row['question'], 
    "id" => $row['id'], 
    "choix" => [$row['i dont know column name'] 
] 

Подсказка:

"ПКМ" будет ваш главный ключ массива, между тем вопрос , id, choix - это ключ массива внутри «QCM». Вы можете сделать структуру JSon как изображение выше, с использованием:

$expected = [ 
    "QCM" => [ 
      "question" => "Est-ce que Captain America gagne contre IronMan", 
      "id"  => "31", 
      "choix" => ["Oui", "Non"] 
     ] 
    ]; 

равна:

$q['QCM']['question'] = 'Est-ce que Captain America gagne contre IronMan '; 
$q['QCM']['id'] = 31; 
$q['QCM']['choix'] = ['Oui', 'Non']; 

Как что сказал @MarkB на комментарий.

+0

Хорошо, я пытаюсь это сейчас, он дает мне правильный синтаксис для моего json, но qcm равно null, я пытаюсь понять, почему! я вернусь :) thx –

+0

Я не могу сделать эту работу, я не понимаю, как это сделать. это так сложно .. –

+0

Попробуйте код ниже ... он немного изменен. возможно, это помогает. – Poiz

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