javascript帮助更改方法结构



我有以下代码,这是一个递归函数,我用它来解析复杂的Json响应,它检测当前代码是String、JsonObject还是Array。这个函数对那些使用空手道或想要解析复杂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']

这个代码的问题是我不能在空手道框架中使用它,因为它给了我这个部分的错误[密钥,…路径],它不接受它。

所以我的问题是,如果有人能帮我写同样的函数parseIt0,比如这个parseIt0(响应,路径(,路径将是一个数组

我开始写这个,但我没有成功

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

有人能帮我吗感谢

我无法阅读或理解您的代码,但我只想说Karate 1.0应该更容易处理JSON并进行这些类型检查。

请阅读升级指南的这一部分:https://github.com/intuit/karate/wiki/1.0-upgrade-guide#type-转换

  • new karate.fromString((,用于从JS块中的JSON或XML字符串自动转换
  • new karate.typeOf((来检测什么";类型";给定的对象是

您将能够使用ES6循环结构:

* array.forEach(x => console.log(x))

最后要注意Karate JSON助手:https://github.com/intuit/karate#json-转换

如果你仍然停滞不前,请简化你的问题,一次问一个具体的问题。但是是的,可能还有其他人比我更有耐心

最新更新