如何在Java中将字符串值转换为自定义模型对象?

13

我有一个模型对象,其中包含多个值。我想将这些值存储在SQLite中。但是数据很大,所以我想直接将模型对象存储到数据库中。因此,我将模型对象转换为字符串并将其存储到数据库中。

现在的问题是如何将这个字符串值转换为模型对象。 如果您有任何想法,请与我分享。

例如:

Person p = new Person();
p.setname("xyz");
p.setage("18");`

String person=p.toString();

现在如何将字符串 "person" 转换为 "p" 模型对象 Person

这是我的代码。

ContentValues values = new ContentValues();
    String favorite_id = UUID.randomUUID().toString();
    values.put(EMuseumLocalData.KEY_FAVORITE_EXHIBITS_ID, favorite_id);
    values.put(EMuseumLocalData.KEY_EXHIBIT_SUBCATEGORY_ITEM_ID, Integer.parseInt(categoryByCustomerList.get(position).getSubCategoryItemID()));
    try {
        Gson gson = new Gson();
        String personString = gson.toJson(getAllCategory.get(position).toString());
        values.put(EMuseumLocalData.KEY_EXHIBIT_SUBCATEGORY_ITEM_DATA, personString);

        Gson gson1 = new Gson();
        CategoryByCustomer categoryByCustomer = gson1.fromJson(personString, categoryByCustomer.getName());
    } catch (JSONException e) {
        e.printStackTrace();
    }

将你的 person 对象转换为 Json 对象,然后将其转换为字符串... 它能正常工作,伙计。 - Nitesh Pareek
3个回答

21

你应该使用 GSON 或类似的库来完成这个任务。


存储到数据库

例如,如果你使用了 GSON

Person p = new Person();
p.setname("xyz");
p.setage("18");
Gson gson = new Gson();
String personString = gson.toJson(p);

现在将这个 personString 存储到数据库中。


从数据库中读取

从数据库中获取此对象,从数据库中读取字符串并将其转换为以下对象:

String personStringFromDB = READ_LOGIC_OF_DB;
Gson gson = new Gson();
Person p = gson.fromJson(personStringFromDB, Person.class);

获取更多信息,请阅读GSON - Gson示例



在这行代码中,JSON是什么意思:Person p = gson.fromJson(json, Person.class); - Android Develeoper
更新了那一行代码,原来是 personStringFromDB - Pankaj Kumar
如果我这样做,那么我会在第二行 Gson gson1 = new Gson(); CategoryByCustomer categoryByCustomer = gson1.fromJson(personString, CategoryByCustomer.class); 上遇到错误 com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 2 path $ - Android Develeoper
分享你的代码。你在转换后编辑字符串吗? - Pankaj Kumar
不要使用对象的toString()方法。问题出在“String personString = gson.toJson(getAllCategory.get(position).toString());”这一行。相反,只需使用“String personString = gson.toJson(getAllCategory.get(position));”。 - Pankaj Kumar
让我们在聊天中继续这个讨论 - Pankaj Kumar

1
考虑使用模型对象的json字符串表示。有许多Java库可用于帮助进行序列化/反序列化部分,例如Jackson、Gson等。

以下是在Jackson中执行此操作的示例代码:

//For conversion of Person object(person) to json String:

String personJsonString = new com.fasterxml.jackson.databind.ObjectMapper().writeValueAsString(person);


//For conversion of json String back to Person object(person)

Person person = new com.fasterxml.jackson.databind.ObjectMapper().readValue(personJsonString, Person.class);

0

你可以让模型对象可序列化。你需要把序列化后的对象存储在SQLite中。当你需要时,只需从SQLite获取该序列化后的对象并进行反序列化。


如何将此可序列化对象存储到SQLite中? - Android Develeoper
可序列化对象是一个字符串。 - Mark Shen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接