从POJO为Jackson创建一个CN1 JSON数组



好的,我在将CN1端POJO从设备连接到可以消耗和生成JSON的Rest服务时遇到了一些问题。

我设法使用Jackson生成的JSON在设备上进行解析,并将其放在内部SQLite数据库中,在设备端添加了一个字段,因为我需要一个外键来存储在SQLite DB中。因此,我从Restservice复制了POJO,删除了Hibernate注释并添加了外键。

在Restservice方面,我运行了Hibernate,所以不需要外键,它通过ArrayLists工作,并正确映射。

因此,从服务中获取元素很好,现在的问题是将更新后的元素返回到服务和数据库。

在设备端,我正在运行CN1数据实用程序库来获取和保存SQLite数据库上的项目。

这些项被读取到ArrayList,从那里我想把它们作为JSON数组推回到Rest服务,Rest服务应该根据正确的格式直接将JSON反序列化为对象。

CN1侧同步方法:

Database db = Display.getInstance().openOrCreate(DBNAME);
DAOProvider provider = new DAOProvider(db, SQLCONFIG, DBVERSION);
provider.set("task", new TaskDAO(provider));
TaskDAO taskDAO = (TaskDAO) provider.get("task");
ArrayList<Task> tasks = (ArrayList<Task>) taskDAO.fetchAll();
ArrayList tasksForService = new ArrayList();
for (Task task : tasks) {
tasksForService.add(task.toJSON());
}
JSONObject tasksAsJSON = new JSONObject();
tasksAsJSON.put("tasks", tasksForService);
// tasksAsJSON.put("tasks", tasksForService);
db.close();

这个看起来像

{"tasks":["id=100001, name=somestuff, plannedDate=null, finishDate=null, status=5, commentary=xy, signature=100001_30.03.2016_signature.png","id=100002, name=somestuff2, plannedDate=null, finishDate=null, status=5, commentary=no comment, signature=100002_30.03.2016_signature.png","id=100004, name=bob, plannedDate=null, finishDate=null, status=5, commentary=, signature="]}

我在这里做错了什么,因为我从服务中得到的格式不同。例如,它看起来像这样,差异很大。

[{"id":100004,"name":"bob","plannedDate":1461103200000,"finishDate":1461106800000,"status":1,"description":null,"commentary":"","signature":""},
{"id":100001,"name":"somestuff","plannedDate":1457910000000,"finishDate":1459288800000,"status":1,"description":"blablub","commentary":"xy","signature":"100001_30.03.2016_signature.png"}]

和CN1上的Task.java,只是为了有人想知道toJSON方法的作用,我尝试了这种方法,但这不是正确的解决方案。

@Override
public String toString() {
return "Task [id=" + id + ", projectId=" + projectId + ", name=" + name + ", plannedDate=" + plannedDate + ", finishDate=" + finishDate + ", status=" + status
+ ", commentary=" + commentary + ", signature=" + signature + "]";
}
public String toJSON() {
return "id=" + id + ", name=" + name + ", plannedDate=" + plannedDate + ", finishDate=" + finishDate + ", status=" + status + ", description=" + description
+ ", commentary=" + commentary + ", signature=" + signature;
}

如果有人可以发布一个用CN1JSON生成JSON数组的小例子?

我正在用我的应用程序做类似的事情!例如:带有cn1数据访问库的SQLite数据库,用于cn1应用程序和带有hibernate和jackson插件的服务器端。

我已经开发了在cn1数据访问插件中递归映射/取消映射对象的方法。

仅供参考,我想你也可以使用这个:

HashMap objectMap = new HashMap();
myDAO.map(myObject, objectMap);
Result.fromContent(objectMap).toString();

这样可以避免逐个处理每个属性,尤其是当您使用数据访问插件时,应该在dao中实现unmap/map方法。

好的,有时开发人员只需要睡眠=)

Database db = Display.getInstance().openOrCreate(DBNAME);
DAOProvider provider = new DAOProvider(db, SQLCONFIG, DBVERSION);
provider.set("task", new TaskDAO(provider));
TaskDAO taskDAO = (TaskDAO) provider.get("task");
ArrayList<Task> tasks = (ArrayList<Task>) taskDAO.fetchAll();
JSONArray jsonTasks = new JSONArray();
for (Task task : tasks) {
JSONObject jsonTask= new JSONObject();
jsonTask.put("id", task.getId());
jsonTask.put("name", task.getName());
// jsonTask.put("plannedDate", task.getPlannedDate());
// jsonTask.put("finishDate", task.getFinishDate());
jsonTask.put("plannedDate", new Date().toString());
jsonTask.put("finishDate", new Date().toString());
jsonTask.put("status", task.getStatus());
jsonTask.put("description", task.getDescription());
jsonTask.put("commentary", task.getCommentary());
jsonTask.put("signature", task.getSignature());
jsonTasks.put(jsonTask);
}
System.out.println(jsonTasks.toString());
db.close();

现在的输出与我想要的类似,仍然需要解决一些小问题,然后它应该通过jackson侧=)

最新更新