2017-07-14 111 views
0

我試圖用json的幫助來構建問答遊戲,在我的第一個問題中,我只是因爲我第一次使用json而面臨問題。訪問json數組內的json數組

JSON文件是:

"Question1": [ 
{ 
    "name": "here will be first question ", 
    "answer":"correct answer", 
    "wrongans" : [ 

     "wronganswer optionA", 
     "wronganswer optionB", 
     "wronganswer optionC" 

    ] 
}], 

接下來,我解析JSON到Java對象,所以一個方法我已經建立:

public static void loadJsonLevels(String fileName, String ques) { 


     JsonValue jsonValue = new JsonReader().parse(Gdx.files.internal(fileName)); 
     JsonValue nameValue = jsonValue.get("Question1"); 

     if (ques.equals("Question1")) { 
      for (JsonValue value : nameValue.iterator()) { 

     question1.add(new QuestionBase()); 

question1.get(question1.size()-1).setQuesname(value.getString("name")); 
              question1.get(question1.size()-1).setCorrectAns(value.getString("answer")); 

       } 

能夠訪問到這裏,接下來我想訪問「wrongans」,存儲在數組中的json中。我已經創建了QuestionBase一個單獨的類,這是

public class QuestionBase { 

public String quesname; 

public String correctAns; 

public String[] wronganswers; 

} 

已經創建QuestionBase即

public static ArrayList<QuestionBase> question1 = new ArrayList<QuestionBase>(); 

這個問題1在方法loadJsonLevels內部使用的類的對象,發現難以訪問「wrongans 「,如果有人提出這個想法如何進一步改進或者我應該改變,這將非常有幫助。

+0

爲什麼日e數組命名爲「Question1」而不是「questions」,例如?第一個對象總是問題1 –

回答

0

可以使用get String數組,以這樣的方式在陣列

JsonValue stringValue=value.get("wrongans"); 
question1.get(question1.size()-1).setWronganswers(stringValue.asStringArray()); 

校驗值:

for (String wrongAns:question1.get(question1.size()-1).getWronganswers()) 
    System.out.println("WRONG ANS : "+wrongAns); 

以另一種方式,你可以請獨立.json文件的問題,如

1stQues.json

{ 
    "quesname": "here will be first question ", 
    "correctAns":"correct answer is what", 
    "wronganswers" : [ 

     "wronganswer optionA", 
     "wronganswer optionB", 
     "wronganswer optionC" 
    ] 
} 

然後從.json文件中創建對象

Json json=new Json(); 
QuestionBase questionBase=json.fromJson(QuestionBase.class,Gdx.files.internal("1stQues.json")); 

for (String wrongAns:questionBase.getWronganswers()) 
    System.out.println("Wrong ans in 1st ques : "+wrongAns); 
+1

謝謝你的工作完美,我試着用第一個。 –

0

嘗試使用Gson JSON Parser -

Gson gson = new Gson(); 

//Parse json into a YourJavaClass object. 
YourJavaClass yourJavaClass= gson.fromJson(jsonResponse, YourJavaClass.class); 

在這裏你可以找到完整的例子 - >Parsing objects in a json array with gson

+0

除了這需要json以不同的格式 –

0
    JSONArray jsonarray = json.getJSONObject("Question1"); 

        if (jsonarray .length()!= 0){ 

         for(int i=0; i<jsonarray .length();i++){ 

          content = jsonarray.getJsonObject(i).getString("name"); 

          JSONArray jsonArray1 = jsonarray.getJSONArray("wronganswers"); 

          for (int j=0; j<jsonArray1.length();j++){ 

           a1= jsonArray1.getString(i); 

          }