javascript - 如何反转 JSON 对象的层次结构?

标签 javascript json object

我怎样才能使用 javascript “翻转”从服务器 API 接收到的 JSON 对象?

示例输入

[
    {
        "id": 7,
        "idAsignacion": 9,
        "idPregunta": 4,
        "cumplimiento": 1,
        "observacionNumeral": 20,
        "observacionEscrita": "HOLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
        "rutaObservacionDocumental": "1/1/1/1/4",
        "created_at": "2017-01-31 18:26:44",
        "updated_at": "2017-01-31 18:26:44",
        "traer_preguntas": {
            "id": 4,
            "idRequisito": 1,
            "ordenPreguntas": 1,
            "pregunta": "jojgpofdkñkñdkgñk",
            "tecnicaAuditoria": "Observación",
            "escrita": 1,
            "numeral": 1,
            "documental": 1,
            "estado": 0,
            "created_at": "2017-01-31 15:42:41",
            "updated_at": "2017-01-31 15:42:41",
            "obtener_requisitos": {
                "id": 1,
                "ordenRequisito": 1,
                "idDimension": 1,
                "nombreRequisito": "Requisito uno",
                "estado": 0,
                "created_at": "2017-01-30 15:19:02",
                "updated_at": "2017-01-30 15:19:02",
                "obtener_dimensiones": {
                    "id": 1,
                    "ordenDimension": 1,
                    "dimension": "Dimension UNO",
                    "estado": 0,
                    "created_at": "2017-01-30 15:18:48",
                    "updated_at": "2017-01-30 15:18:48"
                }
            }
        }
    }
]

期望的输出

"obtener_dimensiones": {
    "id": 1,
    "ordenDimension": 1,
    "dimension": "Dimension UNO",
    "estado": 0,
    "created_at": "2017-01-30 15:18:48",
    "updated_at": "2017-01-30 15:18:48""obtener_requisitos": {
        "id": 1,
        "ordenRequisito": 1,
        "idDimension": 1,
        "nombreRequisito": "Requisito uno",
        "estado": 0,
        "created_at": "2017-01-30 15:19:02",
        "updated_at": "2017-01-30 15:19:02",
        "traer_preguntas": {
            "id": 4,
            "idRequisito": 1,
            "ordenPreguntas": 1,
            "pregunta": "jojgpofdkñkñdkgñk",
            "tecnicaAuditoria": "Observación",
            "escrita": 1,
            "numeral": 1,
            "documental": 1,
            "estado": 0,
            "created_at": "2017-01-31 15:42:41",
            "updated_at": "2017-01-31 15:42:41",
            {
                "id": 7,
                "idAsignacion": 9,
                "idPregunta": 4,
                "cumplimiento": 1,
                "observacionNumeral": 20,
                "observacionEscrita": "HOLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
                "rutaObservacionDocumental": "1/1/1/1/4",
                "created_at": "2017-01-31 18:26:44",
                "updated_at": "2017-01-31 18:26:44",

            }
        }
    }
}

如何将最后一个元素变为第一个元素,依此类推,直到每个“子”属性都成为其原始父级的父级?

最佳答案

输入:

obj = [{
    "id": 7,
    "idAsignacion": 9,
    "idPregunta": 4,
    "cumplimiento": 1,
    "observacionNumeral": 20,
    "observacionEscrita": "HOLAAAAAAAAAAAAAAAAAAAA",
    "rutaObservacionDocumental": "1/1/1/1/4",
    "created_at": "2017-01-31 18:26:44",
    "updated_at": "2017-01-31 18:26:44",
    "traer_preguntas": {
        "id": 4,
        "idRequisito": 1,
        "ordenPreguntas": 1,
        "pregunta": "jojgpofdkñkñdkgñk",
        "tecnicaAuditoria": "Observación",
        "escrita": 1,
        "numeral": 1,
        "documental": 1,
        "estado": 0,
        "created_at": "2017-01-31 15:42:41",
        "updated_at": "2017-01-31 15:42:41",
        "obtener_requisitos": {
            "id": 1,
            "ordenRequisito": 1,
            "idDimension": 1,
            "nombreRequisito": "Requisito uno",
            "estado": 0,
            "created_at": "2017-01-30 15:19:02",
            "updated_at": "2017-01-30 15:19:02",
            "obtener_dimensiones": {
                "id": 1,
                "ordenDimension": 1,
                "dimension": "Dimension UNO",
                "estado": 0,
                "created_at": "2017-01-30 15:18:48",
                "updated_at": "2017-01-30 15:18:48"
            }
        }
    }
}];

代码:

rd(obj[0])
newObj = {}
kn1 = Object.keys(th[2])
newObj[kn1] = th[2][kn1]
kn2 = Object.keys(th[1])
newObj[kn1][kn2] = th[1][kn2]
kn3 = Object.keys(th[0])
newObj[kn1][kn2][kn3] = th[0][kn3]
newObj[kn1][kn2][kn3].root = thr
console.log(JSON.stringify([newObj], null, 4));

function rd(mo, od) {
    if (typeof(od) === "undefined") {th = {}; od = 0}
    else {od++}
    Object.keys(mo).forEach(function(k) {
        if (typeof(mo[k]) === "object") {
            console.group("depth=" + od + " : " + k + "(" + Object.keys(mo[k]).length + ")");
            rd(mo[k], od)
            console.groupEnd();
            if (typeof(th[od]) === "undefined") th[od] = {}
            th[od][k] = mo[k]
            Object.keys(th[od][k]).forEach(function(ik) {
              if (typeof(th[od][k][ik]) === "object") {
                delete th[od][k][ik]
              }
            })
        } else {
            console.log("depth=" + od + " : " + k)
            if (od === 0) {
                if (typeof(thr) === "undefined") thr = {}
                thr[k] = mo[k]
            }
        }
    });
}

代码的第二部分可以改进很多,如果需要我可以处理它。 我添加了 key 名称根以使 JSON 有效

输出:

[
    {
        "obtener_dimensiones": {
            "id": 1,
            "ordenDimension": 1,
            "dimension": "Dimension UNO",
            "estado": 0,
            "created_at": "2017-01-30 15:18:48",
            "updated_at": "2017-01-30 15:18:48",
            "obtener_requisitos": {
                "id": 1,
                "ordenRequisito": 1,
                "idDimension": 1,
                "nombreRequisito": "Requisito uno",
                "estado": 0,
                "created_at": "2017-01-30 15:19:02",
                "updated_at": "2017-01-30 15:19:02",
                "traer_preguntas": {
                    "id": 4,
                    "idRequisito": 1,
                    "ordenPreguntas": 1,
                    "pregunta": "jojgpofdkñkñdkgñk",
                    "tecnicaAuditoria": "Observación",
                    "escrita": 1,
                    "numeral": 1,
                    "documental": 1,
                    "estado": 0,
                    "created_at": "2017-01-31 15:42:41",
                    "updated_at": "2017-01-31 15:42:41",
                    "root": {
                        "id": 7,
                        "idAsignacion": 9,
                        "idPregunta": 4,
                        "cumplimiento": 1,
                        "observacionNumeral": 20,
                        "observacionEscrita": "HOLAAAAAAAAAAAAAAAAAAAA",
                        "rutaObservacionDocumental": "1/1/1/1/4",
                        "created_at": "2017-01-31 18:26:44",
                        "updated_at": "2017-01-31 18:26:44"
                    }
                }
            }
        }
    }
]

关于javascript - 如何反转 JSON 对象的层次结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41965517/

相关文章:

javascript - 从服务器接收 json 数据以显示 Chart.js 图表不起作用

java - 如何深拷贝Object类型的对象?

javascript - 我使用 bootstrap.js 还是所有 14 个单独的 .js 文件有什么关系吗?尝试建立词缀行为

json - Golang 中 json 的结构图

javascript - 从函数返回变量

python - 从字典列表创建嵌套列表

javascript - 在 Canvas 中同时移动一组对象

包含奇怪对象数组的 Python 对象

javascript - 选择某些元素时 slideToggle 或任何 jquery 动画不起作用

javascript - Cocos2d html5无法将属性src设置为null