Java 如何在couchbase(Android)中迭代存储和检索包含嵌套JSON对象的JSONArray

Java 如何在couchbase(Android)中迭代存储和检索包含嵌套JSON对象的JSONArray,java,android,json,couchbase-lite,couchbase-view,Java,Android,Json,Couchbase Lite,Couchbase View,试图在Android中使用此代码将JSON数组存储到Couchbase中,但失败。请帮助了解如何成功存储它,以及如何迭代接收所有数据。查看了Couchbase文档,但仍然卡住了。在存储和接收之前,我是否必须将JSON数组转换为对象?或者,从API private void storeLocalData() { //COUCHBASE IMPLEMENTATION // Create a manager manager = null;

试图在Android中使用此代码将
JSON数组
存储到
Couchbase
中,但失败。请帮助了解如何成功存储它,以及如何迭代接收所有数据。查看了
Couchbase
文档,但仍然卡住了。在存储和接收之前,我是否必须将
JSON数组
转换为对象?或者,从
API

private void storeLocalData() {

        //COUCHBASE IMPLEMENTATION
        // Create a manager
        manager = null;
        try {
            manager = new Manager(new AndroidContext(getActivity()), Manager.DEFAULT_OPTIONS);
        } catch (IOException e) {
            e.printStackTrace();
        }


        // Create or open the database named 'saved_project_sample'
        database = null;
        try {
            database = manager.getDatabase("saved_project_sample");
        } catch (CouchbaseLiteException e) {
            e.printStackTrace();
        }

        // Create a new document
        document = database.createDocument();


        try {
            //Cast json String into JSON Array
            JSONArray jsonArray= new JSONArray(json);

            HashMap<String, Object> properties = new HashMap<>();

                for (int k = 0; k < jsonArray.length(); k++) {
                    JSONObject objJson = jsonArray.getJSONObject(k);

                    Object id = objJson.getString("id");
                    Object title = objJson.getString("title");
                    Object owner_id = objJson.getString("owner_id");
                    Object description = objJson.getString("description");
                    Object status = objJson.getString("status");
                    Object start_time = objJson.getString("start_time");
                    Object finish_time = objJson.getString("finish_time");
                    Object created = objJson.getString("created");
                    Object modified = objJson.getString("modified");

                    properties.put("id", id);
                    properties.put("title", title);
                    properties.put("owner_id", owner_id);
                    properties.put("description", description);
                    properties.put("status", status);
                    properties.put("start_time", start_time);
                    properties.put("finish_time", finish_time);
                    properties.put("created", created);
                    properties.put("modified", modified);


                    document.putProperties(properties);
                Toast.makeText(getActivity(), "Successful Storage", Toast.LENGTH_SHORT).show();
                }


        } catch (CouchbaseLiteException e) {
            e.printStackTrace();
            Toast.makeText(getActivity(), "Unsuccessful", Toast.LENGTH_SHORT).show();
        } catch (JSONException e) {
            e.printStackTrace();
            Toast.makeText(getActivity(), "Unsuccessful", Toast.LENGTH_SHORT).show();
        }

    }
使用和类,则不需要手动获取每个变量

public class UserDocument{
    public int id;
    public String title;
    public String owner_id;
    public String description;
    public String status;
    public Date start_time;
    public Date finish_time;
    public Date created;
    public Date modified;

    public UserDocument() {}; //Needs an empty constructor for reflection;
}
现在你有了这门课,你就可以写了

UserDocument[] userDocuments = new Gson().fromJson(json, UserDocument[].class);

for(UserDocument userDocument : userDocument){

    HashMap<String, Object> properties = new HashMap<>();

    properties.put("id", userDocument.id);
    properties.put("title", userDocument.title);
    properties.put("owner_id", userDocument.owner_id);
    properties.put("description", userDocument.description);
    properties.put("status", userDocument.status);
    properties.put("start_time", userDocument.start_time);
    properties.put("finish_time", userDocument.finish_time);
    properties.put("created", userDocument.created);
    properties.put("modified", userDocument.modified);

    try {
        document.putProperties(properties);
    } catch (CouchbaseLiteException e) {
        e.printStackTrace(); //This will tell you why it fails
    }
}
UserDocument[]userDocuments=new Gson().fromJson(json,UserDocument[].class);
for(UserDocument UserDocument:UserDocument){
HashMap属性=新建HashMap();
properties.put(“id”,userDocument.id);
properties.put(“title”,userDocument.title);
properties.put(“owner\u id”,userDocument.owner\u id);
properties.put(“description”,userDocument.description);
properties.put(“status”,userDocument.status);
properties.put(“start\u time”,userDocument.start\u time);
properties.put(“finish\u time”,userDocument.finish\u time);
properties.put(“created”,userDocument.created);
properties.put(“modified”,userDocument.modified);
试一试{
文件、财产(财产);
}捕获(CouchBaselite异常){
e、 printStackTrace();//这将告诉您它失败的原因
}
}

只需定义属性的类型,然后GSON将检查属性是否可以成为该类型

不可能将hashmap的多个属性放入单个Couchbase doucment中

您每次都可以通过创建新文档

document = database.createDocument(); 

以前

document.putProperties(properties);
我下面的代码现在可以正常工作而不会崩溃

  ProjectSummary[] projectSummaries = new Gson().fromJson(json, ProjectSummary[].class);
        int project_number=1;
        HashMap<String, Object> properties = new HashMap<>();

        for (ProjectSummary projectSummary : projectSummaries) {


            // Create a new document - Every Project-List Will Be Its Own Document
            document = database.getDocument("Project-"+ project_number);

            properties.put("id", projectSummary.id);
            properties.put("title", projectSummary.title);
            properties.put("owner_id", projectSummary.owner_id);
            properties.put("description", projectSummary.description);
            properties.put("status", projectSummary.status);
            properties.put("start_time", projectSummary.start_time);
            properties.put("finish_time", projectSummary.finish_time);
            properties.put("created", projectSummary.created);
            properties.put("modified", projectSummary.modified);

        try {
            document.putProperties(properties);
            Toast.makeText(context, project_number+"- ID Saved", Toast.LENGTH_SHORT).show();
        } catch (CouchbaseLiteException e) {
            e.printStackTrace(); //This will tell you why it fails
            Toast.makeText(context, "failure", Toast.LENGTH_SHORT).show();
        }

        //Increase Project Number
        project_number++;

    }

    Toast.makeText(context, "Project Download Successful \n" , Toast.LENGTH_SHORT).show();

}
document.putProperties(properties);
  ProjectSummary[] projectSummaries = new Gson().fromJson(json, ProjectSummary[].class);
        int project_number=1;
        HashMap<String, Object> properties = new HashMap<>();

        for (ProjectSummary projectSummary : projectSummaries) {


            // Create a new document - Every Project-List Will Be Its Own Document
            document = database.getDocument("Project-"+ project_number);

            properties.put("id", projectSummary.id);
            properties.put("title", projectSummary.title);
            properties.put("owner_id", projectSummary.owner_id);
            properties.put("description", projectSummary.description);
            properties.put("status", projectSummary.status);
            properties.put("start_time", projectSummary.start_time);
            properties.put("finish_time", projectSummary.finish_time);
            properties.put("created", projectSummary.created);
            properties.put("modified", projectSummary.modified);

        try {
            document.putProperties(properties);
            Toast.makeText(context, project_number+"- ID Saved", Toast.LENGTH_SHORT).show();
        } catch (CouchbaseLiteException e) {
            e.printStackTrace(); //This will tell you why it fails
            Toast.makeText(context, "failure", Toast.LENGTH_SHORT).show();
        }

        //Increase Project Number
        project_number++;

    }

    Toast.makeText(context, "Project Download Successful \n" , Toast.LENGTH_SHORT).show();

}
public class ProjectSummary {
public String id;
public String title;
public String owner_id;
public String description;
public String status;
public String start_time;
public String finish_time;
public String created;
public String modified;


public ProjectSummary() {
}