2016-08-25 4 views
-4

Я бы хотел прочитать рекурсивно все узлы из общего JSON (поэтому я не прошу сценарий, который обрабатывает исключительно такую ​​структуру), и, читая, я бы чтобы создать другой JSON в структуре, как это (пример только отрывок):Создайте JSON-чтение рекурсивно из другого неизвестного JSON с Javascript

[ 
    { 
     "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 написанных с указанной структурой.

Спасибо!

+2

вы пробовали что-нибудь вообще? – laker001

+0

Я сделал только рекурсивный скрипт. Он сможет прочитать весь узел, но я застрял в создании объектов и добавлю его в новый JSON. –

ответ

0

Попробуйте на 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)); 
} 
+0

Спасибо, человек! Очень полезно! Ваш скрипт отлично работает! Я ценю ваш ответ, и я подтверждаю вашу благодарность за вас! –

Смежные вопросы