当前位置: 代码迷 >> java >> 找不到JSON对象
  详细解决方案

找不到JSON对象

热度:46   发布时间:2023-07-17 20:54:38.0

我有一个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");
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

第一次迭代时, 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++)
{ ... }

那么很清楚为什么你没有得到第四项。

  相关解决方案