Javascript将不同格式的字符串转换为Json

时间:2018-08-14 05:10:30

标签: javascript json regex

在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" 
          } 
       }
  ] 
} 

2 个答案:

答案 0 :(得分: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))

答案 1 :(得分:0)

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

 $a[0] = '...'
 $a[1] = '...'
 $a[2] = '...'
 $a[3] = '...'
 $a[4] = '...'