javascript - JSON 重组, 求各位大神。
PHP中文网
PHP中文网 2017-04-11 11:10:47
0
9
341

问题是:怎样把这个json1, 转换成json2 的格式。。。 急死了, 我们前端不好解析0.0

json1:

var src = { "title": "限制标题字数", "desc": "", "tagInput": "", "interest": "1", "fwb": "这是富文本11111", "goodImg01": "", "goodTitle01": "富文本1下面礼物名字1", "goodPrice01": "富文本1下面礼物1的价格", "goodId01": "富文本1下面礼物1的ID", "goodImg02": "", "goodTitle02": "富文本1下面礼物2名字2", "goodPrice02": "富文本1下面礼物2的价格", "goodId02": "富文本1下面礼物2的ID", "goodImg03": "", "goodTitle03": "富文本1下面礼物3名字", "goodPrice03": "富文本1下面礼物3的价格", "goodId03": "富文本1下面礼物3的ID", "fwb1": "这是富文本2222", "goodImg11": "", "goodTitle11": "富文本2下面的礼物名字", "goodPrice11": "富文本2下面的礼物价格", "goodId11": "富文本2下面的礼物ID" }

JSON2:

[{ "fwb": "这是富文本11111", "good": [{ "goodImg": "", "goodTitle": "富文本1下面礼物名字1", "goodPrice": "富文本1下面礼物1的价格", "goodId": "富文本1下面礼物1的ID" }, { "goodImg": "", "goodTitle": "富文本1下面礼物2名字2", "goodPrice": "富文本1下面礼物2的价格", "goodId": "富文本1下面礼物2的ID" }, { "goodImg": "", "goodTitle": "富文本1下面礼物3名字", "goodPrice": "富文本1下面礼物3的价格", "goodId": "富文本1下面礼物3的ID" } ] }, { "fwb": "这是富文本2222", "good": [{ "goodImg": "", "goodTitle": "富文本2下面礼物名字1", "goodPrice": "富文本2下面礼物1的价格", "goodId": "富文本2下面礼物1的ID" }, { "goodImg": "", "goodTitle": "富文本2下面礼物2名字2", "goodPrice": "富文本2下面礼物2的价格", "goodId": "富文本2下面礼物2的ID" }, { "goodImg": "", "goodTitle": "富文本2下面礼物3名字", "goodPrice": "富文本2下面礼物3的价格", "goodId": "富文本2下面礼物3的ID" } ] } ]
PHP中文网
PHP中文网

认证高级PHP讲师

全部回复 (9)
巴扎黑
var srcStr=JSON.stringify(src); //加fwb srcStr=srcStr.replace(/("goodId\d{2}":"[^"]*",)("goodImg\d{2}":)/g,'$1"fwb":"",$2'); //自定义一个符号比如::分隔 srcStr=srcStr.replace(/,("fwb[^"]*")/g,'::"fwb"'); srcStr=srcStr.split('::'); var srcRes=[]; var i=1; var temp={}; //一项一项取就好了 while(srcStr[i]){ srcStr[i]=srcStr[i].replace(/,"([a-zA-Z]+)\d{2}"/g,',"$1"'); srcStr[i]= srcStr[i+1]?('{'+srcStr[i]+'}'):('{'+srcStr[i]); temp=JSON.parse(srcStr[i]); temp.mark=i; srcRes.push(temp); i++; } console.log(srcRes);
    巴扎黑

    JSON2的这种格式没错吗。。。{[],[],[]}?这东西解析了怎么取值啊?

    var reg=/^[a-z]+(\d)\d*$/g; for(key in src){ key.replace(reg,function($0,$1,$2){ console.log($0,$1,$2) }) }

    试一下这段代码,比如goodPrice03;
    $0就是‘goodPrice03’;
    $1就是‘0’区别出是文本1;
    $2就是‘3’区别出是文本1下的礼物3;
    也可以在正则里给字母部分也分上组,这样重组之后属性名也能直接提出来了。
    但是你的"fwb"不是"fwb0"有点麻烦。可能需要最后手动添加。

      洪涛

      你这格式真的是乱出了天际,我给你整理了一份,照着改改吧。

      var src = { "title": "限制标题字数", "desc": "", "tagInput": "", "interest": "1", "goods(添加的字段)": [{ "fwb": "这是富文本11111", "good(添加的字段)": [{ "goodImg": "", "goodTitle": "富文本1下面礼物名字1", "goodPrice": "富文本1下面礼物1的价格", "goodId": "富文本1下面礼物1的ID" },{ "goodImg": "", "goodTitle": "富文本1下面礼物2名字2", "goodPrice": "富文本1下面礼物2的价格", "goodId": "富文本1下面礼物2的ID" }, { "goodImg": "", "goodTitle": "富文本1下面礼物3名字", "goodPrice": "富文本1下面礼物3的价格", "goodId": "富文本1下面礼物3的ID" }] },{ "fwb": "这是富文本2222", "good(添加的字段)": [{ "goodImg": "", "goodTitle": "富文本2下面礼物名字1", "goodPrice": "富文本2下面礼物1的价格", "goodId": "富文本2下面礼物1的ID" },{ "goodImg": "", "goodTitle": "富文本2下面礼物2名字2", "goodPrice": "富文本2下面礼物2的价格", "goodId": "富文本2下面礼物2的ID" }, { "goodImg": "", "goodTitle": "富文本2下面礼物3名字", "goodPrice": "富文本2下面礼物3的价格", "goodId": "富文本2下面礼物3的ID" }] }] }
        刘奇

        你要的格式貌似真的有错误。是不是你写错了。

        function take(num) { //补0函数 if(num<10){ num='0'+num; } return num } var arr=[]; var nav=Object.keys(json); //拿出json所有的keys组成一个数组nav function find(item,json) { //找出对应的值来 json就是你的元数据,最大的那个。 for(let n in json){ if(n==item){ return json[n] } } } nav.map( (item,index) => { //item就是nav对应的值 arr.push({ "fwb"+take(index): find(item,json), //类似于"fwb00" //如果只有01,在take上做更改,return num+1 "goodImg"+take(index): find(item,json), "goodTitle"+take(index): find(item,json), "goodPrice"+take(index): find(item,json), "goodId"+take(index): find(item,json), "mark": index, }) })
          小葫芦

          你封装成json1的时候直接用key值isset生成不就可以了么,如果你一定要用json2转换的话,用array_slice一个个的扣下标重组吧

            Ty80

            首先 你的json2格式有误 你自己好好看看
            就我所知道的 应该是没有方法可以直接转了 你只能基本重写
            或者试着遍历json1 通过某算法 筛选再算出第二个

              左手右手慢动作

              我想知道,你这个下面的json2是什么鬼?[{}]?

                伊谢尔伦

                JS中可以用 eval 将json字符串转为对象;
                然后用 each 或者 for 循环重组成目标格式数组;
                最后再用JSON.stringify 将数组转成json就OK了。

                但是不知道你的第二种格式。。。。

                  小葫芦

                  php 获取数据如果是数组的话 直接数组转话成对象 直接json化 估计可以出现你需要的格式

                  $a2o = function ($array) { if (is_array($array)) { $obj = new \StdClass(); foreach ($array as $key => $val) { $obj->$key = $val; } } else { $obj = $array; } return $obj; };
                    最新下载
                    更多>
                    网站特效
                    网站源码
                    网站素材
                    前端模板
                    关于我们 免责声明 Sitemap
                    PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!