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

时间:2017-11-21 01:17:13

标签: javascript string split type-conversion

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

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

6 个答案:

答案 0 :(得分:5)

“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
}

答案 1 :(得分:0)

您可以使用JSON.parse()吗?

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

因此,对于您的示例,它将类似于:

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

答案 2 :(得分: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>

答案 3 :(得分:0)

使用JSON.parse()

此外,你的javascript字符串是无效的JSON,这意味着它无效的javascript。它应该是这样的:

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

这将为您提供所需的相应javascript对象。

答案 4 :(得分: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://stackoverflow.com/questions/9637517/parsing-relaxed-json-without-eval
    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');
}

答案 5 :(得分:0)

这个类似JSON的字符串可以使用vanilla JavaScript和regex解析:

  1. 将字符串缩减为仅String.match()类JSON对象字符串
  2. 的字符
  3. String.replace()属性名称,用引号括起匹配的名称
  4. 使用JSON.parse
  5. 解析对象

    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);