2016-08-25 33 views
-4

ジェネリックなJSONからすべてのノードを再帰的に読みたいと思っています(この種の構造だけを扱うスクリプトを求めていません)このような構造(例は単なる抜粋したものです)で、別のJSONを作成するには:だからJavascriptを使って別の未知の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を作成することができ上記の構造で書かれています。

ありがとうございます!

+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

ありがとう、男!非常に便利!あなたのスクリプトは完璧に動作します!私はあなたの返事に感謝し、私はあなたのために私の感謝を更新! –

関連する問題