我正在尝试解析我原始文件夹中的json文件,但似乎我有一个问题,我无法检测到导致它的原因。 这是我尝试解析的JSON:
{
"data":{
"mainScreen":[
{"id":"1","name":"I fantasmi del\rprincipe","count":"3","type":"big","image":"EventImage1.png","smallCont":"Alla scoperta della vita segreta del Machiavelli ...","addi_info":{
"image":"image_ev1.png",
"content":"Un percorso alla scoperta di Niccolò Machiavelli, grande protagonista della vita politica, civile e artistica del Rinascimento italiano, attraverso i luoghi della sua vicenda pubblica e privata.",
"red_lable":"500 anni, una storia attuale.",
"tasks":[{"id":"1","title":"Faccia a faccia con machiavelli","subtitle":"I fantasmi de Niccolo","head":"\"Guardando verso Firenze: i tormenti di Niccolò\"","image":"bTappa1.png","imageLock":"tapa6Block.png","imageUnlock":"tapa6Pass.png","lock":"0","latitude":"47.020871","longitude":"28.721327","song":""},
{"id":"2","title":"Il galateo del principe","subtitle":"I fantasmi de Niccolo","head":"\"Guardando verso Firenze: i tormenti di Niccolò\"","image":"bTappa2.png","imageLock":"tapa6Block.png","imageUnlock":"tapa6Pass.png","lock":"1","latitude":"47.010871","longitude":"28.721327","song":"01De"},
{"id":"3","title":"La vicenda dell’esilio","subtitle":"I fantasmi de Niccolo","head":"\"Guardando verso Firenze: i tormenti di Niccolò\"","image":"bTappa3.png","imageLock":"tapa6Block.png","imageUnlock":"tapa6Pass.png","lock":"1","latitude":"47.020871","longitude":"28.731327","song":"01De"},
{"id":"4","title":"La giornata di niccolo’","subtitle":"I fantasmi de Niccolo","head":"\"Guardando verso Firenze: i tormenti di Niccolò\"","image":"bTappa4.png","imageLock":"tapa6Block.png","imageUnlock":"tapa6Pass.png","lock":"1","latitude":"47.000871","longitude":"28.701327","song":"01De"},
{"id":"5","title":"A colloquio con gli antichi","subtitle":"I fantasmi de Niccolo","head":"\"Guardando verso Firenze: i tormenti di Niccolò\"","image":"bTappa5.png","imageLock":"tapa6Block.png","imageUnlock":"tapa6Pass.png","lock":"1","latitude":"47.000871","longitude":"28.731327","song":"01De"},
{"id":"6","title":"I fantasmi di niccolo’","subtitle":"I fantasmi de Niccolo","head":"\"Guardando verso Firenze: i tormenti di Niccolò\"","image":"bTappa6.png","imageLock":"tapa6Block.png","imageUnlock":"tapa6Pass.png","lock":"1","latitude":"47.020871","longitude":"28.701327","song":"01De"}
]
}}
]
}
}
这是我的代码:
try {
// Get Data From Text Resource File Contains Json Data.
InputStream inputStream = getResources().openRawResource(
R.raw.fulldata);
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
int ctr;
ctr = inputStream.read();
while (ctr != -1) {
byteArrayOutputStream.write(ctr);
ctr = inputStream.read();
}
inputStream.close();
JSONObject jObject;
jObject = new JSONObject(byteArrayOutputStream.toString());
JSONObject jObjectResult = jObject.getJSONObject("data");
JSONArray jArray = jObjectResult.getJSONArray("mainScreen");
myTasks = new ArrayList<Tasks>();
mainObjs = new ArrayList<MainScreenObject>();
for (int i = 0; i < jArray.length(); i++) {
JSONArray tasks = jArray.getJSONObject(i).getJSONArray(
"tasks");
Log.v("--", tasks.length() + " tasks");
for (int j = 0; j < tasks.length(); j++) {
myTasks.add(new Tasks(tasks.getJSONObject(j)
.getInt("id"), tasks.getJSONObject(j)
.getInt("lock"), tasks.getJSONObject(j)
.getDouble("longitude"), tasks
.getJSONObject(j).getDouble("latitude"),
tasks.getJSONObject(j).getString("title"),
tasks.getJSONObject(j)
.getString("subtitle"),
tasks.getJSONObject(j).getString("head"),
tasks.getJSONObject(j).getString("image"),
tasks.getJSONObject(j).getString(
"imageLock"), tasks
.getJSONObject(j).getString(
"imageUnlock"), tasks
.getJSONObject(j).getString("song")));
}
mainObjs.add(new MainScreenObject(jArray.getJSONObject(
i).getInt("id"), jArray.getJSONObject(i)
.getInt("count"), jArray.getJSONObject(i)
.getString("name"), jArray.getJSONObject(i)
.getString("image"), jArray.getJSONObject(i)
.getString("smallCont"), jArray
.getJSONObject(i).getString("addi_info"),
myTasks));
myTasks.clear();
}
} catch (IOException e1) {
e1.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
}
..我得到的错误:
03-25 13:06:28.318: W/System.err(20588): org.json.JSONException: No value for tasks
03-25 13:06:28.318: W/System.err(20588): at org.json.JSONObject.get(JSONObject.java:354)
03-25 13:06:28.318: W/System.err(20588): at org.json.JSONObject.getJSONArray(JSONObject.java:544)
03-25 13:06:28.318: W/System.err(20588): at com.scsp.Splash$1.run(Splash.java:64)
任何人都知道造成这种情况的原因是什么?
答案 0 :(得分:4)
只需改变它。
jObject = new JSONObject(byteArrayOutputStream.toString());
JSONObject jObjectResult = jObject.getJSONObject("data");
JSONArray jArray = jObjectResult.getJSONArray("mainScreen");
myTasks = new ArrayList<Tasks>();
mainObjs = new ArrayList<MainScreenObject>();
for (int i = 0; i < jArray.length(); i++) {
JSONObject jobj = jArray.getJSONObject(i)
JSONObject jAddi= jobj.getJSONObject("addi_info");
JSONArray tasks = jAddi.getJSONArray("tasks");
您的 addi_info 对象位于 任务 JSONArray中。你没有看到这一点。你拿错了。所以你没有得到。另请检查正确的json数据,请参阅this
答案 1 :(得分:2)
试试这个..
任务 JSONArray
位于您错过的 addi_info JSONObject
for (int i = 0; i < jArray.length(); i++) {
JSONObject obj = jArray.getJSONObject(i)
JSONObject jObsult = obj.getJSONObject("addi_info");
JSONArray tasks = jObsult.getJSONArray("tasks");
.
.
.
答案 2 :(得分:2)
试试:
jObject = new JSONObject(byteArrayOutputStream.toString());
JSONObject jObjectResult = jObject.getJSONObject("data");
JSONArray jArray = jObjectResult.getJSONArray("mainScreen");
myTasks = new ArrayList<Tasks>();
mainObjs = new ArrayList<MainScreenObject>();
for (int i = 0; i < jArray.length(); i++) {
JSONObject jobj = jArray.getJSONObject(i);
JSONObject jAddi= jobj.getJSONObject("addi_info");
JSONArray tasks = jAddi.getJSONArray("tasks");
for (int j = 0; j < tasks.length(); j++) {
myTasks.add(new Tasks(tasks.getJSONObject(j)
.getInt("id"), tasks.getJSONObject(j)
.getInt("lock"), tasks.getJSONObject(j)
.getDouble("longitude"), tasks
.getJSONObject(j).getDouble("latitude"),
tasks.getJSONObject(j).getString("title"),
tasks.getJSONObject(j)
.getString("subtitle"),
tasks.getJSONObject(j).getString("head"),
tasks.getJSONObject(j).getString("image"),
tasks.getJSONObject(j).getString(
"imageLock"), tasks
.getJSONObject(j).getString(
"imageUnlock"), tasks
.getJSONObject(j).getString("song")));
}
mainObjs.add(new MainScreenObject(jArray.getJSONObject(
i).getInt("id"), jArray.getJSONObject(i)
.getInt("count"), jArray.getJSONObject(i)
.getString("name"), jArray.getJSONObject(i)
.getString("image"), jArray.getJSONObject(i)
.getString("smallCont"), jArray
.getJSONObject(i).getString("addi_info"),
myTasks));
myTasks.clear();
}
&#34; {&#34;呈现json对象值和&#34; [&#34;呈现json数组值。