将JSON对象转换回Javascript的String

时间:2017-10-24 04:22:42

标签: javascript json stringify

我正在尝试编写一个递归函数,如果它包含“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;
}

我收到一个语法错误,说“在位置1的JSON中出现意外的令牌o” 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}}');

2 个答案:

答案 0 :(得分:1)

应该是这样的:

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

答案 1 :(得分:0)

我明白了。

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