2016-09-07 2 views
0

誰か助けてくれますか?下のInputをJSON Objectに変換するには?JAVAを使用してプロパティクラスをJSONオブジェクトに変換する方法

入力:

{ "details": { "device/0/endPointClientName": "ndm-xx-1", "device/1/endPointClientName": "ndm-xx-2", "EnergyMeter/0/current": "20", "EnergyMeter/0/total": "400", } } 

出力: -

{ "device": [ {"endPointClientName":"ndm-xx-1" }, {"endPointClientName":"ndm-xx-2" } ], "EnergyMeter": [ {"current":"20", "total":"400"} ] } 

私は、プロパティクラスでJSONオブジェクトとして入力を持っています。入力では、完全パスを共有しています。これをJSON Objectに変換する必要があります。

答えて

-1

[デモ] https://jsfiddle.net/CntChen/vh7kat5a/

var input = { 
     "details": { 
     "device/0/endPointClientName": "ndm-xx-1", 
     "device/1/endPointClientName": "ndm-xx-2", 
     "EnergyMeter/0/current": "20", 
     "EnergyMeter/0/total": "400", 
     } 
    }; 

    function decodeFlatObj(flatOjb) { 
     var outputObj = {}; 
     for (var key in flatOjb) { 
     var objNow = outputObj; 
     var subkey = key.split('/'); 

     for (var i = 0; i < subkey.length - 1; i++) { 
      // next subkey is number 
      if (/\d|[1-9]\d*/.test(subkey[i + 1])) { 
      // current subkey is number 
      if (/\d|[1-9]\d*/.test(subkey[i])) { 
       objNow.push([]); 
       objNow = objNow[parseInt(subkey[i])]; 
      } else { 
       objNow[subkey[i]] = objNow[subkey[i]] || []; 
       objNow = objNow[subkey[i]]; 
      } 
      } else { // next subkey is object 
      // current subkey is number 
      if (/\d|[1-9]\d*/.test(subkey[i])) { 
       objNow[parseInt(subkey[i])] = objNow[parseInt(subkey[i])] || {}; 
       objNow = objNow[parseInt(subkey[i])]; 
      } else { 
       objNow[subkey[i]] = objNow[subkey[i]] || {}; 
       objNow = objNow[subkey[i]]; 
      } 
      } 
     } 

     var valueDecode; 
     if (typeof flatOjb[key] === 'object') { 
      valueDecode = decodeFlatObj(flatOjb[key]); 
     } else { 
      valueDecode = flatOjb[key]; 
     } 

     if (/\d|[1-9]\d*/.test(subkey[subkey.length - 1])) { 
      objNow[parseInt(subkey[subkey.length - 1])].push(valueDecode); 
     } else { 
      objNow[subkey[subkey.length - 1]] = valueDecode; 
     } 
     } 

     return outputObj; 
    } 

    var output = decodeFlatObj(input); 
    console.log(input); 
    console.log(JSON.stringify(output)); 
    //{"details":{"device":[{"endPointClientName":"ndm-xx-1"},{"endPointClientName":"ndm-xx-2"}],"EnergyMeter":[{"current":"20","total":"400"}]}} 
+0

とても良い..あなたはJAVAで同じロジックを実装していただけますか? –

+0

私はJavaがうまくいかない。 Javaで実装するのはそれほど難しいことではありません。あなた自身で行うことができます。 – CntChen

関連する問題