将 JSON 对象转换回 Javascript 的字符串

Convert JSON object back to String for Javascript

我正在尝试编写一个递归函数,如果它包含 "expr" 而不是 "number" 作为键,它将把 JSON 的那部分反馈给函数.我的代码如下:

var result = 0;

function calc(str) {
var obj = JSON.parse(str);
    if(obj.hasOwnProperty("expr")) {
        var temp = obj.expr;
        JSON.stringify(temp);
        calc(temp);
    }
    if (obj.op == "add") {
        var i = parseInt(obj.number);
        result += i;    
    } else if(obj.op == "subtract") {
        var i = parseInt(obj.number);
        result -= i;
    }
    return result;
}

我收到语法错误 "Unexpected token o in JSON at position 1." Stringify 不会将其重新格式化为字符串吗?如果是这样,我该怎么做?

我的输入是这样的:

result = calc('{"op" : "add", "number" : 5}');
result = calc('{"op" : "subtract", "number" : 2}');
result = calc('{"op" : "add", "number" : 19}');
result = calc('{"op": "subtract", "expr" : {"op" : "add", "number" : 15}}');

应该是这样的:

function calc(str) {

    var res = 0;
    var obj = (typeof str =="string") ? JSON.parse(str) : str;

    if(obj.hasOwnProperty("expr")) obj.number = calc(obj.expr);

    switch(obj.op){
      case "add":   
          res += +obj.number;
      break;
      case "subtract":
          res -= +obj.number;
      break;
    }    
    return res;
}

输入

var result = 0;
result += calc('{"op" : "add", "number" : 5}'); 
result += calc('{"op" : "subtract", "number" : 2}'); 
result += calc('{"op" : "add", "number" : 19}'); 
result += calc('{"op": "subtract", "expr" : {"op" : "add", "number" : 15}}');

我明白了。

var result = 0;

function calc(str) {
    var obj = JSON.parse(str);
    var i = parseInt(obj.number);
    if(obj.hasOwnProperty("expr")) {
        var temp = obj.expr;
        temp = JSON.stringify(temp);
        var i = calc(temp);
    }     
    if (obj.op == "add") {
        result += i;
    } else if(obj.op == "subtract") {
        result -= i;
    }
    return result;
}