javascript - 递归 JSON 字符串解析器
问题描述
我在解析 JSON 字符串时需要帮助,但无法完全解决问题所在。
value = 0;
function calc(string) {
let x = JSON.parse(string);
var y;
if (x.expr != undefined){
y = JSON.stringify(x.expr);
}
else {
y = x;
}
if (y.op == 'add') {
return value = value + y.number;
}
else if (y.op == 'subtract') {
return value = value - y.number;
}
x.expr = y;
calc(y);
};
//console.log(calc('{"op" : "add", "number" : 5}' )); //expected value 5
//console.log(calc('{"op" : "subtract", "number" : 2}' )); //expected value 3
//console.log(calc('{"op" : "add", "number" : 19}' )); //expected value 22
console.log(calc('{"op": "subtract", "expr" : {"op" : "add", "number" : 15}}' )); //expected value 0
//console.log(calc('{"op": "add", "expr" : {"op" : "add", "expr" : {"op" : "subtract", "number" : 3}}}' )); //expected value 0
我已取消注释我要调试的部分。我对递归不是很好,我正在尝试读取 JSON 字符串来计算一个数字。
嵌入的表达式对我来说是新事物,所以我不确定如何进行,即基本情况是什么?
请帮我!
解决方案
JSON.parse
reviver 参数可用于以反向级别顺序遍历所有值:
var value = 0;
function calc(string) {
var number;
JSON.parse(string, function(key, val) {
if (val.op) {
if ('number' in val)
number = val.number;
if (val.op === 'add')
console.log(value, '+', number, '=', value += number, '\t', JSON.stringify(val));
else
console.log(value, '-', number, '=', value -= number, '\t', JSON.stringify(val));
}
return val;
});
};
calc( '{"op": "subtract", "expr" : {"op" : "add", "number" : 15}}' );
calc( '{"op": "add", "expr" : {"op" : "add", "expr" : {"op" : "subtract", "number" : 3}}}' );
推荐阅读
- javascript - 当我在另一个组件中时如何访问一个状态?
- spring - 在 SpringBoot 中添加辅助 ObjectMapper
- javascript - jQuery 组合框选项的 onclick 处理
- json - iOS JSON解码数字类型错误
- python - Nan 值的底图 set_bad()
- dpdk - dpdk-pdump 在 bnx2x_common_dev_init() 中失败
- java - 为 hashmap 实现基于时间的队列
- jquery - 从 Devbridge 自动完成中选择建议时防止 onblur
- python - 用相似的索引替换 Pandas DataFrames 中的值
- ruby - 在 Rspec 中的特定测试后运行块