2016-09-07 3 views
0

Может ли кто-нибудь мне помочь? Как преобразовать приведенный ниже вход в объект JSON?Как преобразовать класс свойства в объект JSON с помощью JAVA

Вход:

{ "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.

ответ

-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

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