字符串转换成JSON

JS的字符串转换成JSON对象

好吧实际讲的是cookie字符串转换成json,原理都一样

要实现这一功能,首先,JS的字符串比如是这样的,querystring字符串.也就是有规律的吧,我在做xss,cookie管理平台的时候,碰到的一个问题就是需要把document.cookie收集的字符串,重新转换成JSON格式,然后拿到edit this cookie中去。避免一个一个的粘贴。下面是一个简单的cookie字符串,就以他为例子

var cookie="pgv_pvi=2810585088; it_boombar_first_visit=1480533616; __utma=138229305.716135822.1480562425.1480562425.1480642400.2; __utmz=138229305.1480562425.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); PHPSESSID=eevee4b99frk0rhaaiobqqef71"

最终要实现的效果是这样的:

[
{"domain":"xs.com","name":"pgv_pvi","path":"/","session":false,"storeId":"0","value":"2810585088","id":1},{"domain":"xs.com","name":"it_boombar_first_visit","path":"/","session":false,"storeId":"0","value":"1480533616","id":2},{"domain":"xs.com","name":"__utma","path":"/","session":false,"storeId":"0","value":"138229305.716135822.1480562425.1480562425.1480642400.2","id":3},{"domain":"xs.com","name":"__utmz","path":"/","session":false,"storeId":"0","value":"138229305.1480562425.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none)","id":4},{"domain":"xs.com","name":"PHPSESSID","path":"/","session":false,"storeId":"0","value":"eevee4b99frk0rhaaiobqqef71","id":5}
]

第一步
我们需要用到js的API,split()方法,把字符串分割成数组,当然在这之前我,预先申明了一个str_json数组对象,要于承载最终的结果

var str_json=[];
var arr=cookie.split(';');  //这样我们便得到了一个字符串转换过来的数组
console.log(arr) ;          //看下当前的结果
//Array[5]
//0:"pgv_pvi=2810585088"
//1:" it_boombar_first_visit=1480533616"
//2:" __utma=138229305.716135822.1480562425.1480562425.1480642400.2"
//3:" __utmz=138229305.1480562425.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none)"
//4:" PHPSESSID=eevee4b99frk0rhaaiobqqef71"
//length:5

看一下到这里出来的结果,到这里,数组里面的每一项还需要分割一次以”=”号的方式

第二步
接下我们就需要对上面的arr这个数组的每一项进行遍历,然后作些处理,数组的遍历我采用的是es5的forEach方法,兼容性IE9以上版本,chrome,firefox都支持 ,不知道的去MDN上面看

arr.forEach(function(e,i) {
    //e是遍历的当前项,i是当前数的索引
    //如果索引是个数字,也就是只遍历本地变量
    if (!isNaN(i)) {
        //把当前项,再次分割成数组,一般都是两个值item[0],item[1]
        var item = e.split('=');  

        //如果在此项中有多个=号,也就是分割出来的数组长度大于2
        if(item.length>2){
            var tmp=[];           //建立一个临时数组,置换数据
            tmp[0]=item[0];       
            tmp[1]=[];
            //在此,遍历上面的item数组
            item.forEach(function(cur,d){
                //由于第一项已经交给tmp[0]了,我们只取后面的项,全部放到tmp[1]当中
                if(!isNaN(d) && d>0){
                    tmp[1].push(e);
                }
            })
            //这里我们需要覆盖tmp[1]的值,把里面的数组转换成一个字符串,并还原=号
            tmp[1]=tmp[1].join('=')
            item=tmp;             //在把临时数组tmp,重新给回覆盖回item
        }
        str_json.push({
            "domain":"xxxx.com",
            "name":item[0].trim(),
            "path":"/",
            "session": false,
            "storeId":"0",
            "value":item[1].trim(),
            "id":i
        })
    }   
})
//最后输出一下str_json
console.log(str_json)
//转换成json字符串
console.log(JSON.stringify(str_json))
//用window.prompt提示出来,可以直接拷贝使用了
window.prompt('please copy',JSON.stringify(str_json))

至此cookie字符,转换成字符串结束.

贴上完整代码:

<script>
    var cookie="pgv_pvi=2810585088; it_boombar_first_visit=1480533616; __utma=138229305.716135822.1480562425.1480562425.1480642400.2; __utmz=138229305.1480562425.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); PHPSESSID=eevee4b99frk0rhaaiobqqef71";
    var str_json=[];
    var arr=cookie.split(';');

    arr.forEach(function(e,i) {
        if (!isNaN(i)) {
            var item = e.split('=');
            if(item.length>2){
                var tmp=[];       
                tmp[0]=item[0];
                tmp[1]=[];
                item.forEach(function(cur,d){
                    if(!isNaN(d) && d>0){
                        tmp[1].push(e);
                    }
                })

                tmp[1]=tmp[1].join('=')
                item=tmp;         
            }
            str_json.push({
                "domain":"xxxx.com",
                "name":item[0].trim(),
                "path":"/",
                "session": false,
                "storeId":"0",
                "value":item[1].trim(),
                "id":i
            })
        }       
    })
    console.log(str_json)
    console.log(JSON.stringify(str_json))
    window.prompt('please copy',JSON.stringify(str_json))
</script>
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值