【问题标题】:Converting string to object with Javascript使用Javascript将字符串转换为对象
【发布时间】:2018-05-04 08:41:59
【问题描述】:

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

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

【问题讨论】:

  • String to object in JS的可能重复
  • 写一个解析器去掉JwtBody,然后使用JSON.parse()。
  • @JaromandaX 由于没有引号而作为 json 无效
  • 啊,是的,该死的:p

标签: javascript string split type-conversion


【解决方案1】:

你能用JSON.parse()吗?

我自己没用过,不过好像是创建一个变量,然后用 JSON.parse("string") 把它转换成一个对象。

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

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

【讨论】:

  • 这将失败,因为字符串不是格式正确的 JSON。
【解决方案2】:

不完全确定您要做什么。

你可以试试这样的:

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,在后端我有一个如上所述的字符串,我需要将它转换为一个对象。
  • 1 不需要引用。实际上,他们可能不应该这样做。
【解决方案3】:

使用JSON.parse()

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

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

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

【讨论】:

  • 这会失败,因为字符串不是这种格式
【解决方案4】:

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

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】:

    "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 的变量,其中包含对象的值
    • 只有eval()不安全...如果字符串包含代码,它将被执行。
    【解决方案6】:

    这个类似 JSON 的字符串可以通过以下方式使用 vanilla JavaScript 和正则表达式解析:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-16
      • 1970-01-01
      • 2011-10-05
      • 2013-04-09
      • 2019-03-11
      相关资源
      最近更新 更多