用Javascript从另一个未知的JSON中递归地创建一个JSON

Create a JSON reading recursively from another unknown JSON with Javascript

本文关键字:JSON 创建 一个 Javascript 另一个 未知 递归      更新时间:2023-09-26

我想从通用JSON中递归地读取所有节点(所以我不要求脚本专门处理这种结构),而阅读时我会在这样的结构中创建另一个JSON(示例只是摘录):

[
   {
      "name":"AgreementOffer",
      "size":20000000,
      "children":[
         {
            "name":"Name",
            "size":2000000,
            "children":[
               {
                  "name":"1cap",
                  "size":90
               }
            ]
         },
         {
            "name":"Context",
            "size":2000000,
            "children":[
               {
                  "name":"AgreementInitiator",
                  "size":200,
                  "children":[
                     {
                        "name":"$SPECS-CUSTOMER",
                        "size":100
                     }
                  ]
               },
               {
                  "name":"AgreementInitiator",
                  "size":200,
                  "children":[
                     {
                        "name":"$SPECS-CUSTOMER",
                        "size":100
                     }
                  ]
               },
               {
                  "name":"AgreementResponder",
                  "size":200,
                  "children":[
                     {
                        "name":"$SPECS-APPLICATION",
                        "size":100
                     }
                  ]
               },
               {
                  "name":"AgreementResponder",
                  "size":200,
                  "children":[
                     {
                        "name":"$SPECS-APPLICATION",
                        "size":100
                     }
                  ]
               },
               {
                  "name":"ServiceProvider",
                  "size":200,
                  "children":[
                     {
                        "name":"AgreementResponder",
                        "size":100
                     }
                  ]
               },
               {
                  "name":"ServiceProvider",
                  "size":200,
                  "children":[
                     {
                        "name":"AgreementResponder",
                        "size":100
                     }
                  ]
               },
               {
                  "name":"ExpirationTime",
                  "size":200,
                  "children":[
                     {
                        "name":"2014-02-02T06:00:00",
                        "size":100
                     }
                  ]
               },
               {
                  "name":"ExpirationTime",
                  "size":200,
                  "children":[
                     {
                        "name":"2014-02-02T06:00:00",
                        "size":100
                     }
                  ]
               },
               {
                  "name":"TemplateName",
                  "size":200,
                  "children":[
                     {
                        "name":"Y2-APP-TEMPLATE",
                        "size":100
                     }
                  ]
               },
               {
                  "name":"TemplateName",
                  "size":200,
                  "children":[
                     {
                        "name":"Y2-APP-TEMPLATE",
                        "size":100
                     }
                  ]
               }
            ]
         }
         ]
         }
]

所以,我要求你的脚本能够处理一个通用的JSON(未知的结构和深度),并创建另一个JSON写与上述结构。

谢谢!

试试https://jsfiddle.net/zqkdq5mf/1/

function AppendObject(obj) {
    //console.log(JSON.stringify(obj) + ":" + JSON.stringify(obj).length);
    var Summary = null;
    for (var propertyName in obj) {
    if (typeof obj[propertyName] === "object" && !Summary) {
        Summary = { name: propertyName.toString(), size: JSON.stringify(obj).length, children: [] };
      for (var childPropertyName in obj[propertyName]) {
        var Child = {};
        Child[childPropertyName] = obj[propertyName][childPropertyName];
        Summary.children[Summary.children.length] = AppendObject(Child);
      }
      break;
    } else if (!Summary) Summary = { key: propertyName, value: obj[propertyName], size: JSON.stringify(obj).length };
  }
  return Summary;
}
function Convert() {
    $(".data").empty();
    var ParsedJSON = $.parseJSON($("textarea").val()),
        ObjectArray = [],
        Summaries = [];
    if (!(ParsedJSON instanceof Array)) ObjectArray[0] = ParsedJSON;
    else ObjectArray = ParsedJSON;
    for (var i = 0; i < ObjectArray.length; i++) Summaries[Summaries.length] = AppendObject(ObjectArray[i]);
    $(".data").text(JSON.stringify(Summaries));
}