Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从POJO为Jackson创建CN1 JSON数组_Java_Json_Rest_Jackson_Codenameone - Fatal编程技术网

Java 从POJO为Jackson创建CN1 JSON数组

Java 从POJO为Jackson创建CN1 JSON数组,java,json,rest,jackson,codenameone,Java,Json,Rest,Jackson,Codenameone,好的,我在将CN1端的POJO从设备传输到Rest服务时遇到了一些问题,Rest服务可以使用和生成JSON 我设法使用Jackson生成的JSON在设备上进行解析,并将其放在内部SQLite数据库中,在设备端添加了一个字段,因为我需要一个外键来存储在SQLite数据库中。因此,我从Restservice复制了POJO,删除了Hibernate注释并添加了外键 在Restservice方面,我运行了Hibernate,因此不需要外键,它可以通过ArrayList和maps正常工作 所以从服务中获取

好的,我在将CN1端的POJO从设备传输到Rest服务时遇到了一些问题,Rest服务可以使用和生成JSON

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

在Restservice方面,我运行了Hibernate,因此不需要外键,它可以通过ArrayList和maps正常工作

所以从服务中获取元素可以很好地工作,现在的问题是将更新的元素返回到服务和数据库

在设备端,我正在运行CN1数据utils库来获取和保存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();
我在这里做错了什么,因为我从服务f.e.那里得到的格式不同。它看起来像这样,而且差别很大

[{"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数组的小示例?

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

Database db=Display.getInstance().openOrCreate(DBNAME);
DAOProvider provider=新的DAOProvider(db、SQLCONFIG、DBVERSION);
set(“task”,新的TaskDAO(provider));
TaskDAO TaskDAO=(TaskDAO)provider.get(“任务”);
ArrayList tasks=(ArrayList)taskDAO.fetchAll();
JSONArray jsonTasks=新的JSONArray();
for(任务:任务){
JSONObject jsonTask=新的JSONObject();
jsonTask.put(“id”,task.getId());
put(“name”,task.getName());
//jsonTask.put(“plannedDate”,task.getPlannedDate());
//put(“finishDate”,task.getFinishDate());
jsonTask.put(“plannedDate”,new Date().toString());
jsonTask.put(“finishDate”,newdate().toString());
jsonTask.put(“status”,task.getStatus());
jsonTask.put(“description”,task.getDescription());
jsonTask.put(“commentation”,task.getcommentation());
jsonTask.put(“signature”,task.getSignature());
jsonTask.put(jsonTask);
}
System.out.println(jsonTasks.toString());
db.close();

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

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

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

仅供参考,我认为您也可以使用:

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

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

我已经有了map和unmap方法,它们工作得非常出色。我手动设置变量的方式使我能够隐藏foreignkey变量。我知道您已经实现了映射/取消映射方法。如果您有一个复杂的数据模式,我建议您使用这些代码(这是我的情况,我已经搜索了好几个小时的最佳解决方案)。这些方法不排除删除映射中的foreignkey变量。。。。
    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();
HashMap objectMap = new HashMap();
myDAO.map(myObject, objectMap);
Result.fromContent(objectMap).toString();