处理JSON更改信息的最佳方法

时间:2014-09-17 20:40:49

标签: java json

我正在寻找一种方法来处理我在JSON文件中收到的信息。这个文件应该不断变化(其他人和程序将访问它),所以稍后它就像这个例子:

{
  "activities": [
    {
      "name": "do my homework",
      "status": "not yet done",
      "important": true
    },
    {
      "name": "wash the dishes",
      "status": "not yet done",
      "important": true
    },
    {
      "name": "play videogames",
      "status": "done",
      "important": false
    },
    {
      "name": "take a shower",
      "status": "done",
      "important": true
    }
  ]
}

15分钟后(只是说一段时间)就像这样

{
  "activities": [
    {
      "name": "do my homework",
      "status": "done", //NOTICE THIS ACTIVITY WAS DONE
      "important": true
    },
    {
      "name": "wash the dishes",
      "status": "not yet done",
      "important": false //NOTICE THIS HAS CHANGED ITS IMPORTANCE
    },
    {
      "name": "play videogames",
      "status": "done",
      "important": false
    },
    {
      "name": "take a shower",
      "status": "done",
      "important": true
    },
    { //NOTICE I'VE ADDED A NEW ACTIVITY
      "name": "take another shower",
      "status": "not yet done",
      "important": false
    }
  ]
}

我想知道的是如何处理Java中的这些更改(至少是一个想法),可以帮助我检测这些更改并处理它们。

我正在考虑创建两个arraylists(doneActivities和notYetDoneActivities),并且每10分钟调用一次json文件并检查是否有更改,并且可能在这些arraylists之间切换对象(听起来不错,但我不知道我怎么能做它)。

或者我甚至可以使用mysql数据库,但我认为它可以进一步使我的代码更复杂,并且我试图让它尽可能简单。

注意我的Activities类是这样的:

public class Activity {
   private String name;
   private boolean done;
   private boolean important;
   //Getters and setters
}

任何建议都会非常感激。

2 个答案:

答案 0 :(得分:3)

您需要一个标识字段 - 每个活动都有一个独特的字段,以便您可以始终将已经处理过的字段从已显示的任何新字段中分离出来。您还没有提到如何生成json数据,但是如果涉及到数据库,那么它可能已经存储了一个可以包含在json中的id。

public class Activity {
   private long id;
   private String name;
   private boolean done;
   private boolean important;
   //Getters and setters

   @Override
   public boolean equals(Object o) {
     if (o instanceof Activity) {
       Activity other = (Activity) o;
       return this.getId() == other.getId();
     }
     return false;
   }
}

equals方法允许您将活动存储在一个集合中,例如HashSet

答案 1 :(得分:0)

首先,你必须使用一些东西来编组/解组你的JSON到Java,我推荐GSON,这里是教程的链接:https://sites.google.com/site/gson/gson-user-guide

您将使用类似的行:

Activityies fullObject = gson.fromJson(json, Activities.class);  

其中包含活动列表:List<Activity>

然后我建议覆盖toString方法来比较它更容易,但如果列表不同,你可以实现一些逻辑来比较。

相关问题