使用json格式在localstorage中保存数据

先引入json2.js类库,详见https://github.com/douglascrockford/JSON-js

两个比较重要的方法:

 1. 将Object转化为String

var str = JSON.stringify(obj);
 2. 将String转化为Object

var obj = JSON.parse(str);

进入正文 : )

先将要存储json数据,写下来,方便在用代码结构时参考

{
	"pages" : [
		{
			"url" : "http://h5.m.xxxxxx.com/trip/flight/search/index.html", //页面的url
			"data" : [
				{
					"time" : "17:35:48",
				  	"aplusData" : "Page_Flight"
				},
				{
					"time" : "17:35:54",
				  	"aplusData" : "Button_Flight_Calendar"
				},
				{
					"time" : "17:36:02",
				  	"aplusData" : "Button_Flight_SearchFlight"
				}
			]
		},
		{		
			"url" : "http://h5.m.xxxxxx.com/trip/flight/searchlist/index.html", //页面的url			
			"data" : [
				{
					"time" : "17:35:48",
				  	"aplusData" : "Page_Flight"
				}
			]
		}

	]
}
数据存储的逻辑是

1. 如果url已存在,则将新的数据,push到data数组里

2. 如果url不存在,刚新建一个对象obj,将新的数据,push到obj.data数据里


方法如下:

function _saveLog(pageUrl, data){
    var storage = window.localStorage;
    // var log = _getDate() + '  ' + data + '||' + pageUrl;

    if(!storage.getItem('xxxxxx')){
        var aplusLog = _handleJSON(pageUrl, _getDate(), data, null);

    }else{
        var existLog = storage.getItem('xxxxxx');
        // storage.setItem('xxxxxx', existLog + '::' + log);
        var aplusLog = _handleJSON(pageUrl, _getDate(), data, existLog);
    }

    storage.setItem('xxxxxx', aplusLog);

    console.log('localStorage->' + storage.getItem('xxxxxx'));
}

// 把新增的埋点数据,加入到obj里,存储在localStoage中
function _handleJSON(pageUrl, time, data, objStr){
    var dataStr = '';

    // localstorage中已有埋点数据,向JSON object中插入新数据
    if(objStr){
        var obj = JSON.parse(objStr);
        var pagesItemArr = obj.pages;

        // 该页面下,已有埋点数据,更新
        for(var i = 0; i < pagesItemArr.length; i++){
            
            if(pageUrl == pagesItemArr[i].url){
                
                pagesItemArr[i].data.push({
                    "time" : time,
                    "aplusData" : data
                });

                obj.pages = pagesItemArr;
                dataStr = JSON.stringify(obj);
                
                return dataStr;
            }
        }

        // 该页面下,没有埋点数据,新建
        var pagesItem = {};
        pagesItem.url = pageUrl;
        pagesItem.data = [];

        var dataItem = {};
        dataItem.time = time;
        dataItem.aplusData = data;

        pagesItem.data.push(dataItem);
        pagesItemArr.push(pagesItem);

        // 将数据更新到obj中,转化成string,存储到localstorage中
        obj.pages = pagesItemArr;        
        dataStr = JSON.stringify(obj);
  
    }else{
        // localstorage中没有埋点数据,新建一个JSON object          
        var obj = {};
        obj.pages = [];

        var pagesItem = {};
        pagesItem.url = pageUrl;
        pagesItem.data = [];

        var dataItem = {};
        dataItem.time = time;
        dataItem.aplusData = data;

        pagesItem.data.push(dataItem);
        obj.pages.push(pagesItem);
        console.log(obj);
        dataStr = JSON.stringify(obj);
    }

    return dataStr;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值