• JavaScript:将key和value不带双引号的JSON字符串转换成JSON对象的方法


    遇到相关的问题,花了两天的时间来解决,深感来之不易,所以做如下的总结,希望遇到此问题的码农能更快的找到解决办法!

    var jsonArr= [{col:TO_CHAR(HZRQ,'YYYYMM'),type:=,values:201909},{col:RQ,type:=,values:201909}];

    你想把它转换成JSON对象。把JSON字符串转换成JSON对象,需要使用JSON.parse()方法,对于上面的这种key名上不带双引号的的JSON字符串,使用JSON.parse()解析时会报错,无法解析。这就成了一个很麻烦的问题。所以说,尽量使用规范的预防还是有好处的,尽管大多数时候你不会遇到问题。
    如下的代码是把key加上双引号

    jsonArr= jsonArr.replace(/(?:s*['"]*)?([a-zA-Z0-9]+)(?:['"]*s*)?:/g, ""$1":");

    或者使用如下的方法:jsonArr.replace(/(s*?{s*?|s*?,s*?)(['"])?([a-zA-Z0-9]+)(['"])?:/g, '$1"$3":');

    当然,如果对于值的结果不存在特殊符号,也可以用上面的正则表达式来进行替换,可是对于我目前遇到的问题中,value值中包含_ = < > ,' 等等各种特殊符号,我还没找到更好的正则表达式来进行替换,所以只能想到最笨的办法来解决

    jsonArr= jsonArr.replace(/":/g, "":"").replace(/,"/g, "","").replace(/},/g, ""},").replace(/}]/g, ""}]");

    console.log("jsonArr=",eval(jsonArr) ); 或者使用 var json = eval('('+ jsonArr+ ')');

    案例

    var jsonArr2 = [{
            "Color": 超窄边IPS,
            "SkuId": 1365289,
            "Size": 27英寸
        }, {
            "Color": 21:9超宽IPS曲面,
            "SkuId": 1742140,
            "Size": 29英寸
        }, {
            "Color": 17英寸(TN,5:4方屏),
            "SkuId": 1032147,
            "Size": 17英寸
        }];

    因为内容带有“:”,

    1. (w+):,误处理"21:9超宽IPS曲面"

    2. [{,]s*(w+):,误处理"17英寸(TN,5:4方屏)"

    所以对于以上的json字符串就需要用最笨的办法把value值增加双引号

     
  • 相关阅读:
    Javascript模块化编程(一):模块的写法
    前端技术概括
    转:inline-block 前世今生
    把自己的代码添加到cocoapods 仓库;
    iOS 中获取系统的 相册以及相机的访问权限
    需要在进入下一级界面隐藏tabbar
    IOS框架研究之SDWebImage的原理以及使用流程
    NSLayoutConstraint
    cocoaPos 的安装和使用
    关于UItableView 分割线距离左边 15px 距离的问题 解决方案
  • 原文地址:https://www.cnblogs.com/zhangliang88/p/11720736.html
Copyright © 2020-2023  润新知