【发布时间】:2025-12-30 02:15:06
【问题描述】:
我有以下代码,它是一个递归函数,我用它来解析复杂的 Json 响应,它检测当前代码是字符串、JsonObject 还是数组。这个功能对于那些使用空手道或者想要解析复杂的 JSON 响应的人非常有帮助
function parseIt0(data, [key, ...path]) {
return (Array.isArray(data) ? data : [data]).reduce((acc, obj) => {
if (path.length) {
acc.push(parseIt0(obj[key], path));
} else if (obj[key]) {
acc.push(obj[key]);
}
return acc;
}, []).flat();
}
function getValue(response, s) {
if (!response) return null;
if (!s) return response;
var path = s.split('.');
return parseIt0(JSON.parse(response), path).flat();
}
//which can be used like this
var response2 = '{"data":[{"type":"node--base_product_coffee","id":"6dbb5a52-13ea-4f74-8af9-eb9e3ba45918","date":"1990","data1":[{"type1":"product_coffee1","id1":"6dbb5a52-13ea-4f74-8af9-eb9e3ba45777","date1":[{"res":"oui"},{"res":"non"}]},{"type1":"product_coffee2","id1":"6dbb5a52-13ea-4f74-8af9-eb9e3ba45666","date1":[{"res":"ouiii"},{"res":"nonnn"}]}]}]}';
console.log(getValue(response2, 'data.data1.date1.res');
//which gives : ['oui','non','ouiii','nonnn']
这段代码的问题是我不能在空手道框架中使用它,因为它在这部分 [key, ...path] 上给了我错误,它不接受它。
所以我的问题是如果有人可以帮助我编写相同的函数 parseIt0 像这个 parseIt0(response, path) 路径将是一个数组
我开始写这个,但我没有成功
removeItemOnce = function(arr, value) {
var index = arr.indexOf(value);
if (index > -1) {
arr.splice(index, 1);
}
return arr;
}
function parseIt1(data, path) {
return (Array.isArray(data) ? data : [data]).reduce((acc, obj) => {
if (path.length) {
acc.push(parseIt1(obj[path[0]], removeItemOnce(path, path[0])));
} else if (obj[path[k]]) {
acc.push(obj[path[0]]);
}
return acc;
}, []).flat();
}
function getValue2(response, s) {
if (!response) return null;
if (!s) return response;
var path = s.split('.');
return parseIt1(JSON.parse(response), path).flat();
}
// this in order to use it like the previous code
console.log(getValue2(response2, 'data.data1.date1.res');
谁能帮帮我 谢谢
【问题讨论】:
-
实际错误是什么?请创建一个可执行示例。见meta.*.com/questions/358992/…
-
错误在函数 parseIt1 中,我无法得到与 parseIt0 相同的结果。
标签: javascript karate