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

问题是:怎样把这个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讲师

membalas semua(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;
        };
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!