【发布时间】:2023-03-18 21:24:01
【问题描述】:
我有一个领域数据库文件,我很想从中访问数据。我从手机上的应用程序中提取了它。不幸的是,我想以超出 Realm Studio 能力的方式处理数据。
我的问题是,如何将 .realm 文件转换为另一种数据库形式(JSON、CSV)?我正在使用 Windows 10。
【问题讨论】:
我有一个领域数据库文件,我很想从中访问数据。我从手机上的应用程序中提取了它。不幸的是,我想以超出 Realm Studio 能力的方式处理数据。
我的问题是,如何将 .realm 文件转换为另一种数据库形式(JSON、CSV)?我正在使用 Windows 10。
【问题讨论】:
因此,经过近 12 个小时的艰苦工作,我终于能够将 .realm 文件中的 RealmObjects 转换为 JSON 文件。并且全部使用 Java!
此过程适用于 .realm 文件中的一个模型定义。
我是这样做的:
$YOUR_OBJECT$
在您的 MainActivity 中,添加
Realm.init(this);
RealmConfiguration config = new RealmConfiguration.Builder()
.assetFile(getFilesDir().getPath() + "/NAME_OF_REALM_FILE.realm")
.name("NAME_OF_REALM_FILE.realm")
.schemaVersion(30)
.build();
Realm.setDefaultConfiguration(config);
final Realm realm = Realm.getInstance(config);
final Gson g = new Gson();
到onCreate() 方法。
将onClick(View view)的内容替换为
try {
File output = new File(getFilesDir(), "output.json");
BufferedWriter writer = new BufferedWriter(new FileWriter(output, true));
RealmResults results = realm.where($YOUR_OBJECT$.class).findAll();
Iterator<$YOUR_OBJECT$> iterator = results.iterator();
writer.write("{\"Output\": {");
while (iterator.hasNext()) {
$YOUR_OBJECT$ next = realm.copyFromRealm(iterator.next());
writer.write("\"" + <PUT SOMETHING HERE, LIKE AN ID> + "\": ");
writer.write(g.toJson(next));
writer.write(",");
}
writer.write("}}");
writer.close();
} catch (Exception e) {
e.printStackTrace();
}
请特别注意!!你的 RealmObject 不能有任何循环引用。作为其他 RealmObjects 集合的任何类型的字段都计数。如果您的 GSON 对象溢出,那是 100% 的原因。要删除循环引用,请在调用 g.toJson() 之前调用 next.setREFERENCE(null);。
将您的 .realm 文件放在应用的文件目录中 (data/data/com.app.name/files)
启动应用程序并按下按钮。您的 output.json 将生成在与 .realm 文件相同的目录中。
这个过程并不完美(你会遇到一些小错误,但它们太小了,我不会写它们),但我希望它能帮助你,就像它会帮助我一样。
【讨论】: