Maison  >  Questions et réponses  >  le corps du texte

javascript - Problème de réorganisation json, plus compliqué

1. Question : Convertir le formulaire json1 en json2
2. Description : Il peut y avoir une infinité de couches dans les propriétés, le type fait référence au type, le type de tableau contient des éléments et le tableau peut être un tableau d'objets ou d'autres types.
json1 :

 body: {
                "name": "body",
                "in": "root",
                "required": false,
                "description": "",
                "type": "object",  //数据类型
                "format": "",
                "properties": {
                    "bcc": {
                        "name": "bcc",
                        "in": "body",
                        "required": false,
                        "description": "暗送人列表",
                        "type": "array",
                        "format": "",
                        "properties": null,
                        "items": {
                            "name": "bcc.*",
                            "in": "body",
                            "required": false,
                            "description": "每个暗送人",
                            "type": "object",
                            "format": "",
                            "properties": {
                                "address": {
                                    "name": "bcc.*.address",
                                    "in": "body",
                                    "required": false,
                                    "description": "单个暗送人地址",
                                    "type": "string",
                                    "format": "email",
                                    "properties": null,
                                    "items": null
                                },
                                "name": {
                                    "name": "bcc.*.name",
                                    "in": "body",
                                    "required": false,
                                    "description": "单个暗送人名称",
                                    "type": "string",
                                    "format": "",
                                    "properties": null,
                                    "items": null
                                }
                            },
                            "items": null
                        }
                    },
                    "cc": {
                        "name": "cc",
                        "in": "body",
                        "required": false,
                        "description": "抄送人列表",
                        "type": "array",
                        "format": "",
                        "properties": null,
                        "items": {
                            "name": "cc.*",
                            "in": "body",
                            "required": false,
                            "description": "每个抄送人",
                            "type": "object",
                            "format": "",
                            "properties": {
                                "address": {
                                    "name": "cc.*.address",
                                    "in": "body",
                                    "required": false,
                                    "description": "单个抄送人地址",
                                    "type": "string",
                                    "format": "email",
                                    "properties": null,
                                    "items": null
                                },
                                "name": {
                                    "name": "cc.*.name",
                                    "in": "body",
                                    "required": false,
                                    "description": "单个抄送人名称",
                                    "type": "string",
                                    "format": "",
                                    "properties": null,
                                    "items": null
                                }
                            },
                            "items": null
                        }
                    },
                    "content": {
                        "name": "content",
                        "in": "body",
                        "required": true,
                        "description": "邮件内容",
                        "type": "string",
                        "format": "",
                        "properties": null,
                        "items": null
                    },
                    "from": {
                        "name": "from",
                        "in": "body",
                        "required": true,
                        "description": "发件人",
                        "type": "object",
                        "format": "",
                        "properties": {
                            "address": {
                                "name": "from.address",
                                "in": "body",
                                "required": true,
                                "description": "发件人地址",
                                "type": "string",
                                "format": "email",
                                "properties": null,
                                "items": null
                            },
                            "name": {
                                "name": "from.name",
                                "in": "body",
                                "required": true,
                                "description": "发件人名称",
                                "type": "string",
                                "format": "",
                                "properties": null,
                                "items": null
                            }
                        },
                        "items": null
                    },
                    "mimeType": {
                        "name": "mimeType",
                        "in": "body",
                        "required": true,
                        "description": "mime type",
                        "type": "string",
                        "format": "alphanum",
                        "properties": null,
                        "items": null
                    },
                    "subject": {
                        "name": "subject",
                        "in": "body",
                        "required": true,
                        "description": "主题",
                        "type": "string",
                        "format": "",
                        "properties": null,
                        "items": null
                    },
                    "to": {
                        "name": "to",
                        "in": "body",
                        "required": true,
                        "description": "收件人列表",
                        "type": "array",
                        "format": "",
                        "properties": null,
                        "items": {
                            "name": "to.*",
                            "in": "body",
                            "required": true,
                            "description": "每个收件人",
                            "type": "object",
                            "format": "",
                            "properties": {
                                "address": {
                                    "name": "to.*.address",
                                    "in": "body",
                                    "required": true,
                                    "description": "单个收件人地址",
                                    "type": "string",
                                    "format": "email",
                                    "properties": null,
                                    "items": null
                                },
                                "name": {
                                    "name": "to.*.name",
                                    "in": "body",
                                    "required": true,
                                    "description": "单个收件人名称",
                                    "type": "string",
                                    "format": "",
                                    "properties": null,
                                    "items": null
                                }
                            },
                            "items": null
                        }
                    }
                },
                "items": null
            },

2.json 2

body: {
 'bcc': [{'address':'单个暗送人地址', 'name':'单个暗送人名称'}],
  'cc': [{'address':'单个抄送人地址', 'name':'单个抄送人名称'}],
 "content": '邮件内容',
  "from": {'address':'发件人地址', "name":'发件人名称'},
"mimeType": "mime type",
"subject": "主题",
"to":[{'address':'单个收件人地址', 'name':'单个收件人名称'}]
}
phpcn_u1582phpcn_u15822681 Il y a quelques jours630

répondre à tous(3)je répondrai

  • phpcn_u1582

    phpcn_u15822017-05-19 10:26:26

    En raison de contraintes de temps, je n'ai pas écrit trop de détails dans les commentaires

        // 假设 a 就是json1, b 就是json2
        var a = {
            body: {...}
        };
        var b = {
            body: {...}
        };
    
        function recursion( data, o, type ) {
            // 这里规定下,最终递归出来的数据类型
            b.body[o] = {
                'object': {},
                'array' : [],
                'string': ''
            }[ type ];
            
            // 这里获取下面的新数据,
            var newData = {
                'object': data.properties,
                'array' : data.items,
                'string': data.description
            }[ data.type ];
        
            // 判断新数据是否符合递归条件,并获得最终数据
            if ( newData && newData.type ) {
                recursion( newData, o, type )
            }else{
                if ( type == 'object' || type == 'array' ) {
                    for (let i in newData){
                        newData[i] = newData[i].description
                    }
                };
    
                if ( type == 'array' ) {
                    b.body[o].push(newData);
                } else {
                    b.body[o] = newData;
                };
            };
        }
    
        var data = a.body.properties;
        for (let o in data) {
            // 从这里开始递归,
            recursion( data[o], o, data[o].type )
        }
        console.log(b);

    répondre
    0
  • 滿天的星座

    滿天的星座2017-05-19 10:26:26

    La traversée récursive des arbres est très bien.

    répondre
    0
  • ringa_lee

    ringa_lee2017-05-19 10:26:26

    Merci pour l'invitation. . . .

    function deepReadTree(param) {
            var child_param, cur_result;
            if (param.properties) {
                child_param = param.properties;
                cur_result = {};
                for (var key in child_param) {
                    cur_result[key] = deepReadTree(child_param[key]);
                }
            } else if (param.items) {
                child_param = param.items.properties;
                cur_result = {};
                for (var key in child_param) {
                    cur_result.push(deepReadTree(child_param[key]));
                }
            }else{
                cur_result = param.description;
            }
    
            return cur_result;
        }
    


    Logiquement parlant, vos éléments doivent être un tableau, sinon votre structure de données ne peut pas être produite.

    répondre
    0
  • Annulerrépondre