如何将 JSON 快速插入到 React Native 应用程序的 Realm 数据库中

yzh*_*ou5 6 realm react-native

我正在使用 React Native 和 Realm 设计一个离线应用程序。其中一项功能是在下线之前从 Web API 下载数据。下载的数据是一个长 JSON。例如:

[{"EventID":"3769","EventName":"Birthday Party","EventDate":"Jun 21 2018  4:00 PM"},{"EventID":"4232","EventName":"Homecoming","EventDate":"Jun 22 2018 11:00 PM"}, {"EventID":"3838","EventName":"the Summer Show","EventDate":"Jun 28 2018  2:00 AM"}]
Run Code Online (Sandbox Code Playgroud)

在 Realm 中如何插入一个条目有很多示例,例如:

realm.write(() => {
  Event.push({EventID: 3769, EventName: 'Birthday Party'});
  Event.push({EventID: 4232, EventName: 'Homecoming'});
});
Run Code Online (Sandbox Code Playgroud)

但是有没有办法一次将 JSON 批量插入到 Realm 表中?

非常感谢!!!


更新- 有效!

我已经用下面的代码尝试了 geisshirt 的解决方案(谢谢!)。导入一个包含 50,000 个实体的 JSON 字符串大约需要 10 秒。(每个实体都有 ID、名称和日期属性)。一个技巧是调试模式比在真正的应用程序上运行要慢得多。

反应本机代码:

axios.get('https://APISERVER/XX/GET_EVENTS')
 .then(response => {
   Realm.open({
     schema: [{ name: 'Events', properties: { EventID: 'string', EventName: 'string', EventDate: 'string' } }]
   }).then(realm => {
     realm.write(() => {
        response.data.forEach(obj => {
            realm.create('Events', obj);
        });
    });
 })
Run Code Online (Sandbox Code Playgroud)

再次感谢!

gei*_*irt 6

你可以这样做:

let objs = JSON.parse('[{"EventID":"3769","EventName":"Birthday Party","EventDate":"Jun 21 2018  4:00 PM"},{"EventID":"4232","EventName":"Homecoming","EventDate":"Jun 22 2018 11:00 PM"}, {"EventID":"3838","EventName":"the Summer Show","EventDate":"Jun 28 2018  2:00 AM"}]');
realm.write(() => {
    objs.forEach(obj => {
        realm.create('Event', obj);
    });
});
Run Code Online (Sandbox Code Playgroud)

您将所有对象插入一个事务中 ( realm.write())。