首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >字符串到JSON的转换

字符串到JSON的转换
EN

Stack Overflow用户
提问于 2019-06-19 16:09:51
回答 2查看 82关注 0票数 0

我有像这样的线

代码语言:javascript
复制
{Name: India, Path: test.png, Id: 1, Uri: /api/1}

通过Javascript,我尝试这样解析这个值

代码语言: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);

它会产生这样的错误

代码语言:javascript
复制
   unexpected token e in json at position 10 at json.parse 

我猜输出应该是这样的

代码语言:javascript
复制
  {"Name":  "India" , "Path":  "test.png", "Id":  1, "Uri":  "/api/1"}

有人能帮我解决这个字符串到JSON的转换吗?这样我就可以解析并获得"Id“的值

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-06-19 16:24:42

尝试使用split and join:

我已经列出了所需的每个步骤,但您可能可以将其简化得多。

代码语言:javascript
复制
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);

此外,如果您直接将其添加到我的代码中,则可以跳过正则表达式的内容,如下所示:

代码语言:javascript
复制
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);

票数 2
EN

Stack Overflow用户

发布于 2019-06-19 16:35:57

通过转换为JSON,您可以使用split轻松获取所需的项目:

代码语言:javascript
复制
var result = sCountry.split(/ *, */);
var path = result[1].split(/ *: */)[1];
var id = result[2].split(/ *: */)[1];

请添加一些错误检查,以防得到意外格式的字符串。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56662943

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档