JSON.在关键字中使用美元解析错误

JSON.parse error with dollar in key

本文关键字:美元 错误 关键字 JSON      更新时间:2023-09-26

我正在尝试解析字符串"{$Duration:1200,$Opacity:2}"到对象

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

失败,出现

异常
Unexpected token $ in JSON at position 1.

关于我应该如何处理这种情况,有什么建议吗?

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

试试这个。

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

将它们包裹到""中。这是一个JSON syntax,将每个键和值包装到""中,您可以在没有""的情况下放入数字和布尔值。

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

或者您可以简单地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>

您应该将key/props与"括起来。'单引号也不起作用。如果您可以控制生成字符串。修改如下。如果没有,应该考虑使用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);