如何将JSON快速插入Realm数据库以用于React Native应用程序

How to fast insert a JSON into Realm Database for a React Native App

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

1
[{"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中插入一个条目的例子很多,例如:

1
2
3
4
realm.write(() => {
  Event.push({EventID: 3769, EventName: 'Birthday Party'});
  Event.push({EventID: 4232, EventName: 'Homecoming'});
});

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

非常感谢!!!

更新-有效!

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

反应本机代码:

1
2
3
4
5
6
7
8
9
10
11
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);
        });
    });
 })

再次感谢!


您可以执行以下操作:

1
2
3
4
5
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);
    });
});

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


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Data.js

const DataList= {
    list: [
        {
           "prodId":"4232",
           "prodName":"Hero Moto Corp",
           "prodDesc":"Allrounder",
           "prodPrice":"15000",
           "prodImage":"https://lh3.googleusercontent.com/a-/AAuE7mBq326Bqo0dObU3TDEDK3fBw9kc3PI5J4Tjt9fw=s96-c"
        },
 {
           "prodId":"4232",
           "prodName":"Hero Moto Corp",
           "prodDesc":"Awesome product",
           "prodPrice":"18500",
           "prodImage":"https://lh3.googleusercontent.com/a-/AAuE7mBq326Bqo0dObU3TDEDK3fBw9kc3PI5J4Tjt9fw=s96-c"
        }
    ]

}

export default DataList;


       // let objs = JSON.parse('[{"prodId":4232,"prodName":"Homecoming","prodDesc":"MBA" ,"prodImage":"https://lh3.googleusercontent.com/a-/AAuE7mBq326Bqo0dObU3TDEDK3fBw9kc3PI5J4Tjt9fw=s96-c","prodPrice" :"15236"},{"prodId":4232,"prodName":"Homecoming","prodDesc":"MBA" ,"prodImage":"https://lh3.googleusercontent.com/a-/AAuE7mBq326Bqo0dObU3TDEDK3fBw9kc3PI5J4Tjt9fw=s96-c","prodPrice" :"15236"},{"prodId":4232,"prodName":"Homecoming","prodDesc":"MBA" ,"prodImage":"https://lh3.googleusercontent.com/a-/AAuE7mBq326Bqo0dObU3TDEDK3fBw9kc3PI5J4Tjt9fw=s96-c","prodPrice" :"15236"},{"prodId":4232,"prodName":"Homecoming","prodDesc":"MBA" ,"prodImage":"https://lh3.googleusercontent.com/a-/AAuE7mBq326Bqo0dObU3TDEDK3fBw9kc3PI5J4Tjt9fw=s96-c","prodPrice" :"15236"}]');

从'./Data'导入DataList

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 DataList.list.forEach(obj => {
            db.addProduct(obj).then((result) => {
                console.log(" insert result  --------- " + result);
                this.setState({
                    isLoading: false,
                });
                 this.props.navigation.navigate('ProductScreen');


                //  alert("Sqlite Insert Difference" + difference );

            }).catch((err) => {
                console.log(" insert err  --------- " + err);
                this.setState({
                    isLoading: false,
                });
            })

        });