Javascript 包含等于的字符串=&引用;没有引号可以转换为JSON

Javascript 包含等于的字符串=&引用;没有引号可以转换为JSON,javascript,json,stringify,Javascript,Json,Stringify,我目前一直在尝试用javascript将字符串转换为JSON 我从服务器获取的字符串是: "{knee=true, centered=true}" 我想要的结果是这样的: { knee: true, centered: true} 但是由于字符串使用的是equals,并且缺少引号,因此JSON.parse不起作用,我不知道如何解决这个问题。任何帮助都将不胜感激,谢谢 假设没有嵌套的东西或字符串,其中没有逗号或括号,则可以将所有{替换为{“,=替换为”:,,替换为,“:

我目前一直在尝试用javascript将字符串转换为JSON

我从服务器获取的字符串是:

"{knee=true, centered=true}"
我想要的结果是这样的:

{ knee: true, centered: true}

但是由于字符串使用的是equals,并且缺少引号,因此JSON.parse不起作用,我不知道如何解决这个问题。任何帮助都将不胜感激,谢谢

假设没有嵌套的东西或字符串,其中没有逗号或括号,则可以将所有
{
替换为
{“
=
替换为
”:
替换为
,“

const str=“{knee=true,centered=true}”
console.log(
JSON.parse(str.split(“{”).join(“{”).split(“=”).join(““:”).split(“,”).join(“,”))

)
如果没有更多细节,就无法验证这一点的正确性,但如果我要做一些假设:

  • 对象是由
    {
    }
  • 键/值对由
  • 允许在键/值对周围使用任意空格
  • 键和值由
    =
  • 值只能保存应转换为JavaScript布尔值的值
    true
    false
…然后可以通过一些正则表达式和字符串操作来完成解析

const objectRegExp = /^\{(.*)}$/;

function parseNJson(str) { // notJSON
  const match = objectRegExp.exec(str);
  if (!match) {
    throw new Error('This is not NJson');
  }

  const [, keyValuesBlock] = match;
  const keyValueStatements = keyValuesBlock.split(',');
  const keyValues = keyValueStatements.map(statement => statement.split('='));

  return keyValues.reduce((result, [keyStr, valueStr]) => {
    const key = keyStr.trim();
    
    const trimmedValue = valueStr.trim();
    let value;
    if (trimmedValue === 'true') {
      value = true;
    } else if (trimmedValue === 'false') {
      value = false;
    } else {
      throw new Error(`Unsupported value ${trimmedValue}`);
    }

    return Object.assign(result, { [key]: value });
  }, {});
}
如果任何假设不正确,例如“如果值可以是字符串怎么办?如果字符串可以用双引号引起来怎么办?如果它们也可以用单引号括起来怎么办?如果支持数字怎么办?如果支持十六进制数字怎么办?”


如果在服务器上发送的数据是标准格式,那么他们应该能够告诉您“此格式为X”因此,您可以找到一个符合规范的X解析器。或者您可以坚持将数据作为JSON发送,因为这是一种超常见的交换格式。最好的情况是,服务器和客户端使用一个通用的、定义良好的消息格式规范,这样,在接收或发送具有您不具备的特征的数据时,您就不会意外地破坏数据t解释。

我能做的最好的事情是……它返回字符串中对象的值,尽管它似乎工作得很完美!(实际上这一个挑战了我,所以我不得不这么做):-)

let str=“{knee=true,centered=true}”;
str=str.replaceAll('{','')
str=str.replaceAll('}','')
str=str.split(“,”)
str=Object.assign({},str);
让重点关注你的价值;
让钥匙;
让瓦尔;
for(var i=0;i你有更多关于这个格式的细节吗?不可能写出一个好的解析器,除非你知道字符串的内容可能包含什么。这不是有效的JSON。请你考虑修复源代码吗?@ EngRetrXBox,就在我理解服务器发送无效JSON格式的时候,问题是如何在clie上修复它。nt端。问题中甚至描述字符串不是有效的JSON。@jabaa理解。最好在源代码处修复它。非常感谢!!!这对我很有用!非常感谢你的回答!!我从服务器上获得的数据看起来就像我每次给出的示例,所以我需要做的解析只是我将配置一次,每次调用数据时它都会工作。
let str = "{knee = true, centered = true}";
str = str.replaceAll('{', '')
str = str.replaceAll('}', '')
str = str.split(",")
str = Object.assign({}, str);
let key_value;
let key;
let val;
for (var i = 0; i < Object.keys(str).length; i++) {

  key_value = str[i].split("=");
  key = String(key_value[0]);
  val = key_value[1];
  str[i] = val;
  delete Object.assign(str, {[key]: str[i]
  })[i];

}

console.log(str)