2016-07-29 3 views
-2

私は、Javaアプリケーション内でJava Nashornで動作するjsスクリプトの構造に陥るのではなく、構造が異なります。 Javaチームは既にオブジェクトの配列より前のものを変換することができないため、オブジェクトのオブジェクトとして来ていません。ここでの複雑さは、5〜6レベルのように非常にネストされていることです。私はそれを変換するためにいくつかのアプリケーションのために行っている直接的なアプローチを使用する代わりに、再帰的な解決方法を見つけることは素晴らしいことです。ここで オブジェクトのオブジェクトのオブジェクト

は構造がソリューションがキー名に依存しないべきであるように見えることができるものである。

出力が期待される非かわいいプリントJSONのため

{ 
    "abc": { 
    "items": { 
    "0": { 
     "cde": "123456", 
     "fgh":{ 
      "0": {"ijk":"987654"} 
     } 
    }, 

    .... 
It goes on and on. 
} 

} 
} 

申し訳ありません

{ "abc": { "items": [ { "cde": "123456", "fgh":[{"ijk":"987654"}], .... It goes on and on. } ] } 

アンダースコアの解決策がperfeであるため、アンダースコアの_ _toArrayと私自身の関数を使用することができました。 ct。

アドバイスはありますか?利用可能なソリューションはありますか?アンダースコア?

+1

それはあなたが、出力が実際に見えるようにしたいものを全く明確ではありません。しかし、ネストされた配列のJSON表現のように見えますが、少なくとも始めるのは難しいように思えません。これまでのところ何があって、何が問題なのですか? –

+0

申し訳ありません。 "items":{"0":{...}}の部分は、 "items"のような配列でなければなりません。[{"cde": "123456"、...}] – nickmenow

答えて

1

これはあなたが始める役立つはずです。..ソリューションを向上させるために私のコメントをお読みください

//test object 
var json = { 
    "abc": { 
     "items": { 
      "0": { 
       "cde": "123456", 
       "fgh":{ 
        "0": {"ijk":"987654"} 
       } 
      }, 
     }, 
    }, 
}; 

//check array: this code should be customized to your needs- I only check for numbers here 
var isArray = function (obj) { 
    if (typeof obj !== 'object') 
     throw new Error('invalid argument'); 
    for (var m in obj) 
     if (obj.hasOwnProperty(m) && !/^\d+$/.test(m)) //test if key is numeric 
     return false; 

    return true; 
} 

//recursive parse-function 
var parse = function (obj, node) { 
    if (typeof obj !== 'object') 
     return obj; //break condition for non objects 

    if (isArray(obj)) { 
     node = node || []; 
     for (var m in obj) 
      node.push(parse(obj[m])); 
    } 
    else { 
     node = node || {}; 
     for (var m in obj) 
      node[m] = parse(obj[m]); 
    } 

    return node; 
} 

//run 
var newObj = parse(json); 
console.log(JSON.stringify(newObj)); 

jsfiddle:https://jsfiddle.net/oh4ncbzc/

+0

ありがとう。これは私の目的のために完全に機能しました。アプローチは私の試みよりも簡単で、より良いので、私はこのスクリプトのための良い量を学びました。 – nickmenow

+0

あなたは大歓迎です。 – Wolfgang

関連する問題