问题描述
我有一个JSON ArrayList[222, 222, 333, 444, 555, 666, 777]
我只需要在JSON ArrayList中存储值[333,444,555,666,777]
。
我已经尝试过下面的代码,但是未能获取值444的JSON对象。遇到的错误是: Exception: org.json.JSONException: JSONObject["4"] not found.
//list to delete data
int lengthJSONMerged = JSONmergedJSONDataLog.length();
int count= lengthJSONMerged - 5; //5 is the max number should be in the array
for(int u= count+1; u < lengthJSONMerged+1;u++) {
String str = Integer.toString(u);
JSONArray arrSessionDouble=(JSONArray)JSONmergedJSONDataLog.get(str);
}
原始数据如下。 我需要保留最新的5条记录。
{"1":[{"sessionID":"222","loginTime":"2019-02-25 15:10:03"}],
"2":[{"sessionID":"222","loginTime":"2019-02-25 15:10:05"}],
"3":[{"sessionID":"333","loginTime":"2019-02-25 15:10:11"}],
"4":[{"sessionID":"444","loginTime":"2019-02-25 15:10:17"}],
"5":[{"sessionID":"555","loginTime":"2019-02-25 15:10:26"}],
"6":[{"sessionID":"666","loginTime":"2019-02-25 15:10:35"}],
"7":[{"sessionID":"777","loginTime":"2019-02-25 17:09:30"}]}
您知道为什么我会收到该错误吗? 当我尝试硬编码并运行Java程序时,我设法获得了属性“ 4”的值。
我用来硬编码并获取属性4的vakue的代码。
JSONArray arrSessionDouble=(JSONArray)JSONmergedJSONDataLog.get("4");
1楼
ArrayList[222, 222, 333, 444, 555, 666, 777]
因此,您要存储最后5个值,因此我假设您将count变量作为u变量的开始。
int lengthJSONMerged = JSONmergedJSONDataLog.length();
int count= lengthJSONMerged - 5 // to get start of u
for(u=count;u<lengthJSONMerged;u++) //lengthJSONMerged to loop upto 7 as arrayindex would be 6
{
String str = Integer.toString(u);
JSONArray arrSessionDouble=(JSONArray)JSONmergedJSONDataLog.get(str); //Here loop will run for u=2,3,4,5,6
}
因此,使用以上代码,将存储数组的最后5个元素。 您可能会迷惑使用数组索引。 不要忘记数组从索引0开始。您的jason的编号从1开始。
您在代码中出错的地方 :
for(u=count+1;u<lengthJSONMerged+1;u++)
因此,这里是从3(count + 1)开始循环,以8(length即7 + 1)结束,我们的数组元素是
ArrayList[0]:- 222
ArrayList[1]:- 222
ArrayList[2]:- 333
ArrayList[3]:- 444 //your loops starts here
ArrayList[4]:- 555
ArrayList[5]:- 666
ArrayList[6]:- 777
ArrayList[7]:- null //here you are getting exception as you are pointing to node
ArrayList[8]:- null //Ends here
2楼
第一次迭代时, lengthJSONMerged
值为2:
int lengthJSONMerged = JSONmergedJSONDataLog.length(); // length of array is 7
int count= lengthJSONMerged - 5; // 7 - 5 = 2
究竟是uT
吗?
for(int u= uT; u < lengthJSONMerged+1;u++)
如果只是初始化并且uT
变量设置为1(数组中第一个JSON对象的值),则您的for循环将如下所示:
for(int u = 1; u < 3; u++)
{ ... }
那么很清楚为什么你没有得到第四项。