javascript - 字符串到 JSON 转换

标签 javascript

我有这样的字符串

{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/

相关文章:

javascript - 如何从 .JSON javascript 检索数据

javascript - 由于某些 javascript 提升,变量显示为未定义

javascript - 在外部回调中解决/拒绝 Promis

javascript - JavaScript 变量的背景颜色十六进制

javascript - IE10 中文本框的动态对齐不起作用

javascript - jQuery 自定义内容滚动条

javascript - 使用开关访问天气图标

javascript - 如何使用 onclick 防止默认 addClass 函数并在给定日期返回该函数

javascript - 我如何干掉服务器端 Ruby 和客户端 Javascript 之间的业务逻辑?

javascript - 将鼠标悬停在 jquery 上,将 Div 展开