密钥中带有美元的JSON.parse错误

时间:2016-11-17 08:19:26

标签: javascript angularjs json

我正在尝试将字符串"{$Duration:1200,$Opacity:2}"解析为Object

var tr = "{$Duration:1200,$Opacity:2}";
JSON.parse(tr); 

因例外

而失败
Unexpected token $ in JSON at position 1.

关于如何处理这种情况的任何指示?

4 个答案:

答案 0 :(得分:1)

将它们包裹到""。这是JSON syntax,将每个键和值包装到""。您可以在不使用""的情况下输入数字和布尔值。

var str = JSON.parse('{"$Duration":"1200","$Opacity":"2"}'); 
console.log(str);

答案 1 :(得分:1)

对象键和字符串必须在JSON中的双引号内。

试试这个。

JSON.parse('{ "$Duration": 1200, "$Opacity": 2 }');

答案 2 :(得分:0)

您应该使用"附加键/道具。 '单引号也无法发挥作用。如果您可以控制生成字符串。修改如下。如果没有,您应该考虑使用REGEX。



var a = JSON.parse('{"$Duration":1200,"$Opacity":2}'); 
console.log(a);




如果修改了键名,您只需在字符串中替换它们即可。最后得到一个有效的JSON:



var str      = "{$Duration:1200,$Opacity:2}",
    validStr = str.replace(/((\$[a-zA-Z0-9]*)(?:\:))/g, '"$2":'),
    j        = JSON.parse(validStr);
console.log(j);




答案 3 :(得分:0)

或者您只需JSON.stringify()然后JSON.parse()无需在任何地方添加额外的引号。请在代码段下方运行。



var app = angular.module('app', []);
app.controller('Ctrl', function($scope) {

    var str = JSON.stringify({$Duration:1200,$Opacity:2});
    $scope.list = JSON.parse(str);
    console.log(JSON.parse(str));

});

<script data-require="angular.js@1.4.8" data-semver="1.4.8" src="https://code.angularjs.org/1.4.8/angular.js"></script>

<div ng-app="app" ng-controller="Ctrl">
  
  {{list}}
  <p>{{list.$Duration}}  - {{list.$Opacity}}</p>
  </div>
&#13;
&#13;
&#13;