我已经搜索了很多答案或解释为什么“JSONObject.getString()”不起作用。 首先这是来自php服务器的响应
{"3":["S1","2013","Final"],"2":["S0","2010","Mid"],"1":["S6","2015","Final"]}
这是我的代码:
CCNERequest.add(new BasicNameValuePair("Semester", "S"));
CcneJsonString = CCNEexams.getJSONFromUrl(CCNEUrl, CCNERequest);
if (CcneJsonString != null) {
try {
JSONObject jObj = new JSONObject(CcneJsonString);
for (int i = 0; i < jObj.length(); i++) {
JSONArray jsonArray = new JSONArray(
jObj.getString(values[i]));
}
这段代码对我很好,而values []是一个像这样实现的数组:
public String[] values = { "1", "2", "3", "4", "5", "6", "7", "8", "9",
"10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20",
"21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31",
"32", "33", "34", "35", "36", "37", "38", "39", "40", "41", "42",
"43", "44", "45", "46", "47", "48", "49", "50" };
现在将来我可能有超过1000个JSONObjects,我不想实现数组值[],因为我想要编写好的代码并且效率很高,所以我试着用精确的方法替换数组值[i]像这样的JSONObject数:
CCNERequest.add(new BasicNameValuePair("Semester", "S"));
CcneJsonString = CCNEexams.getJSONFromUrl(CCNEUrl, CCNERequest);
if (CcneJsonString != null) {
try {
JSONObject jObj = new JSONObject(CcneJsonString);
for (int i = 0; i < jObj.length(); i++) {
JSONArray jsonArray = new JSONArray(
jObj.getString(String.valueOf(i));
}
通过这种方式,我不必在代码中实现先前的值[],但遗憾的是这不起作用,它会抛出异常
JSONArray jsonArray = new JSONArray(
jObj.getString(String.valueOf(i));
所以我的问题是,为什么它在JSONObject.getString()中将转换后的变量赋予字符串时会发生异常错误,并且是他们以任何方式去除字符串值数组[]并使用另一种方法我没有实现静态的结果?
答案 0 :(得分:1)
在第一次循环迭代中,i
为0,但JSONObject中没有键0。这会导致JSONException。
你应该从1开始循环。