我有这样的字符串
{Name: India, Path: test.png, Id: 1, Uri: /api/1}
通过Javascript我尝试像这样解析这个值
var sCountry = document.getElementById("countries").value; // this will give value as {Name: India, Path: test.png, Id: 1, Uri: /api/1}
var fixedJSON = sCountry
// Replace ":" with "@colon@" if it's between double-quotes
.replace(/:\s*"([^"]*)"/g, function(match, p1) {
return ': "' + p1.replace(/:/g, '@colon@') + '"';
})
// Replace ":" with "@colon@" if it's between single-quotes
.replace(/:\s*'([^']*)'/g, function(match, p1) {
return ': "' + p1.replace(/:/g, '@colon@') + '"';
})
// Add double-quotes around any tokens before the remaining ":"
.replace(/(['"])?([a-z0-9A-Z_]+)(['"])?\s*:/g, '"$2": ')
// Turn "@colon@" back into ":"
.replace(/@colon@/g, ':')
;
console.log('Before: ' + sCountry);
console.log('After: ' + fixedJSON);//Output comes like this {"Name": India, "Path": test.png, "Id": 1, "Uri": /api/1}
var obj = JSON.parse(fixedJSON);
它给出这样的错误
unexpected token e in json at position 10 at json.parse
我想输出应该是这样的
{"Name": "India" , "Path": "test.png", "Id": 1, "Uri": "/api/1"}
任何人都可以帮我解决这个字符串到 JSON 的转换问题吗?这样我就可以解析并获取“Id”的值
最佳答案
尝试拆分和连接:
我已经列出了所需的每个步骤,但您可能可以使其变得更小。
let val = '{"Name": India, "Path": test.png, "Id": 1, "Uri": /api/1}';
// Remove brackets from string (first and last char)
let valWithoutBrackets = val.substring(1, val.length-1);
// Make key value pair array in string format (delimited by : )
let keyValuePairStrings = valWithoutBrackets.split(",");
// Make two dimensional key value pair array
let keyValuePairs = keyValuePairStrings.map(k => k.split(":").map(kv => kv.trim()));
// Map all values to values with brackets, except Id
let keyValuePairsWithBrackets = keyValuePairs.map(k => {
if(k[0] != '"Id"') {
k[1] = `"${k[1]}"`;
}
return k;
});
// Make two dimensional key value pair array to key value string array
let resultKeyValuePairStrings = keyValuePairsWithBrackets.map(k => k.join(":"));
// Make key value string array to list of keyvalues and add brackets again
let resultString = `{${resultKeyValuePairStrings.join(",")}}`;
// Log the parsed JSON Id
let obj = JSON.parse(resultString);
console.log(obj);
console.log(obj.Id);
如果您将正则表达式直接添加到我的代码中,则可以跳过它,如下所示:
let val = '{Name: India, Path: test.png, Id: 1, Uri: /api/1}';
// Remove brackets from string (first and last char)
let valWithoutBrackets = val.substring(1, val.length-1);
// Make key value pair array in string format (delimited by : )
let keyValuePairStrings = valWithoutBrackets.split(",");
// Make two dimensional key value pair array
let keyValuePairs = keyValuePairStrings.map(k => k.split(":").map(kv => kv.trim()));
// Map all values to values with brackets, except Id
let keyValuePairsWithBrackets = keyValuePairs.map(k => {
if(k[0] != 'Id') {
k[1] = `"${k[1]}"`;
}
k[0] = `"${k[0]}"`; // <-- Also put the key under quotations
return k;
});
// Make two dimensional key value pair array to key value string array
let resultKeyValuePairStrings = keyValuePairsWithBrackets.map(k => k.join(":"));
// Make key value string array to list of keyvalues and add brackets again
let resultString = `{${resultKeyValuePairStrings.join(",")}}`;
// Log the parsed JSON Id
let obj = JSON.parse(resultString);
console.log(obj);
console.log(obj.Id);
关于javascript - 字符串到 JSON 转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56662943/