[英]How to access nested JSON with array in firebase
我想在Firebase中访问此结构的JSON
结构
{
"questions":{
"English":{
"English_2002":[
{
"correct_ans":"A",
"OptionA":"a coder",
"OptionB":"a hacker",
"OptionC":"a writer",
"OptionD":"a programmer",
"Question":"Who build software"
},
{},
{}
],
"English_2003":[],
}
}
}
我想要这种结构。 在科目结构上,我用尽9年英语后将再学习其他科目。
我的困惑是如何合理地获取每个主题,因为firebase仅接受根名称问题。
请我听起来可能有些愚蠢,但是我有一个非常长的问题线程将近55000行。 因为firebase接受一棵JSON树。
抱歉,我不是很清楚,我是从堆栈电话应用程序中询问的:
我有一个上面结构的问题json标签; 我的问题是我将如何访问对象对象,例如“ english”:{//然后访问第一个英语数组“ english”:[] //因为现在正在使用firebase。
}
最初,每个数组都是单独的json文件,出于Firebase的缘故,我必须将它们重新创建为一个。 这就是我当时解析的方式。
public class QuestionParser {
Context context;
public QuestionParser(Context c) {
this.context = c;
}
public ArrayList<Question> getJsonFromUrl(String url, String arrayName)
{
ArrayList<Question> arrayofQuestion = new ArrayList<>();
return arrayofQuestion;
}
// Processing question from JSon file in res > raw folder
public ArrayList<Question> parseQuestionJson(int rawJsonFileId, String arrayName) {
ArrayList<Question> questionList = new ArrayList<>();
String jsonstr = null;
try {
InputStream in = context.getResources().openRawResource(rawJsonFileId);
BufferedReader br = new BufferedReader(new InputStreamReader(in));
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = br.readLine()) != null) {
sb.append(line + "\n");
}
jsonstr = sb.toString();
Log.d("REEEEADDD" + this.toString(), jsonstr);
//System.out.println(jsonstr);
} catch (Exception e) {
Log.e("Buffer Error", "Error converting result " + e.toString());
}
// If the JSON string is empty or null, then return early.
if (TextUtils.isEmpty(jsonstr)) {
return null;
}
try {
JSONObject jsonObject = new JSONObject(jsonstr);
JSONArray jsonArray = jsonObject.getJSONArray(arrayName);
JSONObject jobject;
for (int i = 0; i < jsonArray.length(); i++) {
// TEST
jobject = jsonArray.getJSONObject(i);
String ans = jobject.getString("correct_answer");
String graphic_name = jobject.getString("question_image");
String optionA = jobject.getString("optiona");
String optionB = jobject.getString("optionb");
String optionC = jobject.getString("optionc");
String optionD = jobject.getString("optiond");
String questionNo = jobject.getString("question_number");
String question = jobject.getString("question");
questionList.add(new Question(questionNo, graphic_name, question, optionA, optionB, optionC, optionD, ans));
Log.d("DDD" + this.toString(), String.valueOf(questionList.get(i)));
}
Log.i("ONE QUESTION", questionList.get(50).getQuestion());
} catch (Exception e) {
Log.e("JSON Parser", "Error parsing data " + e.toString());
}
return questionList;
}
}
因此,我该如何从firebase解析它,因为最初,如果学生选择问题,并且年份,我会将这些值作为参数传递并用于解析。 但是现在在firebase中,我只能在get reference e方法中访问root firebase名称。
要访问例如“ correct_ans”:“ A”,您可以像这样查询您的firebase:
your.firebase.domain/questions/English/English_2002/0/correct_ans
请注意,json对象中的每个级别都由一个/
和您要访问的键表示,而在数组的情况下,您只需添加数组索引。 JSON的简单结构还允许简单的REST
类的访问
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.