【问题标题】:Javascript Convert string in a different format to JsonJavascript将不同格式的字符串转换为Json
【发布时间】:2019-01-20 21:04:27
【问题描述】:

在 Javascript 中,我有一个需要转换为 JSON 的字符串。 我尝试如下使用正则表达式转换它,但没有得到预期的结果:

var testData = "{	name=xyz, \
	ip=[127.0.0.1], \
  machine_id=AVC_ASD_QWESF, \
	sys_Properties=[{ \
				Memory=4 GB, \
				system_type={ \
						OS=64 bit, \
						processor=64 bit \
						} \
				}] \
}";
var testJson = '';
var testArray = testData.split(',');
testArray.forEach(function(item) {
  var kvp = item.split('=');

  if (kvp.length > 1) {
    var key = kvp[0];
    var value = kvp[1];
    var value1 = '';

    if (kvp.length > 2) {
      value1 = kvp[2];

      value1 = value1.replace(/\b[a-zA-Z0-9]/gi, function(char) {
        return '"' + char;
      })
      value1 = value1.replace(/[a-zA-Z0-9]\b/gi, function(char) {
        return char + '"';
      })

      value = value + '": ' + value1;
    } else if (kvp.length = 2) {
      value = value.replace(/\b[a-zA-Z0-9]/gi, function(char) {
        return '"' + char;
      })
      value = value.replace(/[a-zA-Z0-9]\b/gi, function(char) {
        return char + '"';
      })
    }

    key = key.replace(/\b[a-z]/gi, function(char) {
      return '"' + char;
    })

    testJson = testJson + key + '": ' + value + ',';
  } else {
    testJson = testJson + item + ",";
  }
});

是否有任何选项可以包含诸如“。”之类的符号包含在单词边界中。

编辑:

预期的 JSON 格式:

{ 
  "name":"xyz", 
  "ip":["127.0.0.1"], 
  "machine_id":"AVC_ASD_QWESF", 
  "sys_Properties":[
      { "Memory":"4 GB", 
          "system_type":{ 
              "OS:64 bit", 
              "processor":"64 bit" 
          } 
       }
  ] 
} 

【问题讨论】:

  • 你确定你只能这样的文本数据?
  • 是的,这就是我们获取数据的方式

标签: javascript json regex


【解决方案1】:

通过.replace 回调尝试这样的操作:

const regex = /\s*(\w+)\s*(?==)|(=\[?)([^,{\[\]}\n]+)/g;
const str = `{	name=xyz, 
	ip=[127.0.0.1], 
  machine_id=AVC_ASD_QWESF, 
	sys_Properties=[{ 
				Memory=4 GB, 
				system_type={ 
						OS=64 bit, 
						processor=64 bit 
						} 
				}] 
}`;

const result = str.replace(regex, function(m, group1, group2, group3) {
    if (group1) return `"${group1}"`; //key
    else if (group2) return `${group2}"${group3}"`;   // ="value"
    //else return m;
});
console.log(result.replace(/\=/g,  ':')
                  .replace(/(".+?")|\s+/g,  `$1`)); 
//replace remaining = with colon, and optional: replace remaining whitespace

如果没有 ip 键值对,这可能非常容易。我试图保持简单,并在最后一步用冒号替换了剩余的=。或者,我们也可以删除剩余的空格然后使用JSON.stringify(JSON.parse(result))

【讨论】:

    【解决方案2】:

    试试这个。 我已经通过使用一个简单的正则表达式解决了它。

    var testData = '{   name=xyz, \
    ip=[127.0.0.1], \
    machine_id=AVC_ASD_QWESF, \
    sys_Properties=[{ \
                Memory=4 GB, \
                system_type={ \
                        OS=64 bit, \
                        processor=64 bit \
                        } \
                }] \}';
    
    var testJson = testData.replace(/(\s)([^\s]*)(\=)/g,'"$2"$3').replace(/(\=)/g, ":").replace(/\s+/g," ").replace(/(\:)([^\:\,\}]*)(\,|\})/g,'$1"$2"$3').replace(/(\")(\[)(.*)(\])(\")/g,"$2$1$3$5$4");
    
    console.log(JSON.parse(testJson))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-01
      • 2013-02-04
      • 2020-09-09
      • 1970-01-01
      • 1970-01-01
      • 2011-10-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多