将字符串转换为javascript对象

时间:2017-07-28 13:18:39

标签: javascript jquery

"{INDIA=99, PAKISTAN=30}" 

我有这种形式的字符串,想转换成json对象。 试过了

JSON.parse({INDIA=99, PAKISTAN=30}).

但是收到错误

  

VM2602:1未捕获的SyntaxError:位置1的JSON中出现意外的令牌O

6 个答案:

答案 0 :(得分:3)

您的字符串有两个问题:

  1. 键和值由冒号(:)分隔,而不是等于(=)。
  2. 密钥应包含在引号中。
  3. 虽然最好的方法是纠正JSON(输入字符串)字符串本身,但您可以尝试使用此方法从当前字符串创建对象。

      

    注意:这不是一个强大的解决方案。由于此解决方案依赖于要拆分的字符串中的逗号,如果此模式在{India=100, 000, 000}之类的值中可用,则此解决方案将失败。所以把它作为你的最后手段。字符串操作绝不会100%覆盖。

    var str = "{INDIA=99, PAKISTAN=30}";
    var kv = str.substring(1, str.length -1);
    
    var list = kv.split(", ");
    var result = list.reduce(function(p,c){
      var parts = c.split('=');
      p[parts[0]] = parts[1];
      return p;
    }, {})
    console.log(result)

答案 1 :(得分:2)

您的输入不是有效的JSON。您可以尝试将其转换为适当的字符串,然后在尝试时调用JSON.parse。请参阅下面的代码段,随时询问您是否还有其他问题。



const str = "{INDIA=99, PAKISTAN=30}";
const result = JSON.parse(str.replace(/\=/g, ':').replace(/([a-zA-Z]+)/g, '"$1"'));

console.log(result);
console.log(result['INDIA']);




答案 2 :(得分:1)

尝试使用replacesplit字符串。并使用Array#forEach

创建对象



var str ="{INDIA=99, PAKISTAN=30}" ;
var c = str.replace(/[\}\{]/g,'').trim().split(',')
var res={};
c.forEach(a=> res[a.split('=')[0].trim()] = a.split('=')[1].trim())
console.log(res)




答案 3 :(得分:0)

您没有提供有效的JSON。

为了使JSON.parse()起作用,您需要提供有效的JSON。

示例:

{"INDIA": 99, "PAKISTAN": 30}

你的代码中的

JSON.parse('{"INDIA": 99, "PAKISTAN": 30}');

希望这有帮助!

答案 4 :(得分:0)

你需要在键周围加上字符,否则它不会被读取。 所以:

var str = '{"INDIA":99, "PAKISTAN":30}'
JSON.parse(str);

这应该有效。

答案 5 :(得分:0)

JSON.parse('{"INDIA":99, "AKISTAN":30}')