首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用JAVA将Properties类转换为JSON对象

如何使用JAVA将Properties类转换为JSON对象
EN

Stack Overflow用户
提问于 2016-09-07 19:59:01
回答 1查看 214关注 0票数 0

有谁可以帮我?如何将下面的输入转换为JSON对象?

输入:

代码语言:javascript
复制
{ "details": { "device/0/endPointClientName": "ndm-xx-1", "device/1/endPointClientName": "ndm-xx-2", "EnergyMeter/0/current": "20", "EnergyMeter/0/total": "400", } }

输出:-

代码语言:javascript
复制
{  "device": [ {"endPointClientName":"ndm-xx-1" }, {"endPointClientName":"ndm-xx-2" } ], "EnergyMeter": [ {"current":"20", "total":"400"} ] } 

我将输入作为带有Properties类的JSON对象。在输入中,我们共享完整路径。我们必须将其转换为JSON对象。

EN

回答 1

Stack Overflow用户

发布于 2016-09-07 22:24:29

demo

代码语言:javascript
复制
   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"}]}}
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39369358

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档