使用Javascript将字符串转换为对象

3

我正在尝试将这个字符串转换为对象。

   "JwtBody { user_id: 1, auth_id: 1}"

1
可能是JS中的字符串转对象的重复问题。 - jwebb
1
编写一个解析器来剥离 JwtBody,然后使用 JSON.parse()。 - unional
1
@JaromandaX 无效的 JSON,因为缺少引号。 - charlietfl
啊,是的,该死的 :p - Jaromanda X
6个回答

10

"JwtBody { user_id: 1, auth_id: 1}" 显然不是标准的 JSON 字符串,您可以尝试这样做。

function strToObj(str){
   var obj = {};
   if(str&&typeof str ==='string'){
       var objStr = str.match(/\{(.)+\}/g);
       eval("obj ="+objStr);
   }
   return obj
}

或者简写为eval(“JwtBody {user_id:1,auth_id:1}”。replace(/([^}]+?)({.*})/,'$ 1 = $ 2')); - 结果是一个名为JwtBody的变量,其值为该对象 - Jaromanda X
3
只有eval()是不安全的...如果字符串中包含代码,它将被执行。 - Alexis Wilke

0

你能使用JSON.parse()吗?

我自己没有用过它,但看起来可以创建一个变量并使用JSON.parse("string")将其转换为对象。

因此,对于你的示例,它应该是这样的:

var object = JSON.parse("JwtBody { user_id: 1, auth_id: 1}");

8
这会失败,因为字符串不是格式良好的 JSON。 - kamoroso94

0

不太确定你想要做什么。

你可以尝试这样做:

var str = '{"user_id": "1", "auth_id": "1"}';
var obj = $.parseJSON(str);

请确保您的jQuery代码如下:

<script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>

我无法使用jQuery,在后端我有一个如上所述的字符串,我需要将其转换为一个对象。 - user7453724
1 不需要加引号。实际上,它们很可能不应该加引号。 - Alexis Wilke

0

如果您无法更改示例中的数据:

var parsedData = {};
var str = "JwtBody { user_id: 1, auth_id: 1}";

function getRawJSON(str){
    return str.split(' ').map((el, index)=>{return index>0 ? el : ''}).join('');
}

function formatingValidJSON(str){
    // From https://dev59.com/OGkw5IYBdhLWcg3wzdtF
    return str
    .replace(/:\s*"([^"]*)"/g, function(match, p1) {
        return ': "' + p1.replace(/:/g, '@colon@') + '"';
    })
    .replace(/:\s*'([^']*)'/g, function(match, p1) {
        return ': "' + p1.replace(/:/g, '@colon@') + '"';
    })
    .replace(/(['"])?([a-z0-9A-Z_]+)(['"])?\s*:/g, '"$2": ')
    .replace(/@colon@/g, ':')
}

str = formatingValidJSON(getRawJSON(str));
try{
    parsedData = JSON.parse(str);
    console.log('Your parsed data:', parsedData);
}
catch(e){
    console.log('Your data is wrong');
}

0

可以使用原生JavaScript和正则表达式解析此类似JSON的字符串:

  1. 将字符串减少到仅包含String.match() JSON对象字符串的字符
  2. String.replace()属性名称,用引号括起匹配的名称
  3. 使用JSON.parse解析对象

var jwtBodyString = "JwtBody { user_id: 1, auth_id: 1}";

`//1 match on only JSON within string
jwtBody = jwtBodyString.match(/{[^}]+}/).toString();`    

//2 enclose property names to prevent errors with JSON.parse()
jwtBody = jwtBody.replace(/([a-zA-Z]+):/g,'"$1":'));

//3 obtain object
var myJwtBodyObject = JSON.parse(jwtBody);

-1

使用JSON.parse()函数。

此外,您的JavaScript字符串无效,这意味着它也是无效的JavaScript代码。应该像这样:

JSON.parse('{"jwtbody" : { "user_id" : 1, "auth_id" : 1}}');

这将会返回你所需要的相应的JavaScript对象。

这将失败,因为字符串不符合此格式。 - user7453724

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接