在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"
}
}
]
}
答案 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] = '...'