我正在使用按属性值对对象数组进行排序的代码对我的Json进行排序。但是它不起作用,我使用请求从web中存储Json,并使用jsonpath。
这不是排序,它只是给我发送GET内容(排序之前)。我觉得这是parseFloat (第15行)的问题所在,但我不知道如何修复它。我进入https://jsonpath.com/是为了测试一点,应该是..rank而不是.rank
我的代码:
var request = require('request');
var jp = require('jsonpath');
var options = {
'method': 'GET',
'url': 'https://groups.roblox.com/v1/groups/2642914/roles',
'headers': {
}
};
request(options, function (error, response) {
if (error) throw new Error(error);
var obj = JSON.parse(response.body);
var rolesList = jp.query(obj, '$..roles');
rolesList.sort(function(a, b) {
return parseFloat(a.rank) - parseFloat(b.rank);
});
console.log(rolesList)
});发布于 2020-07-04 04:54:58
.query总是返回所有匹配的数组。
在obj匹配的pathExpression中查找元素。返回满足所提供的JSONPath表达式的元素数组,如果没有匹配,则返回空数组。如果指定,只返回第一个计数元素。
您是从jsonpath查询rolesList = [ [{... rank: ...}, {}, {} ...] ]获得的,因此排序是对单个元素数组执行的。
您可以使用.value来获得第一个匹配项。
$..roles是不必要的,除非您需要获得任意嵌套级别的属性,这里不是这种情况。在第一层是可以到达的。
我在任何地方都使用了CORS,因此可以在浏览器(这里的密码箱)中运行:
var request = require('request');
var jp = require('jsonpath');
var options = {
'method': 'GET',
'url': 'https://cors-anywhere.herokuapp.com/https://groups.roblox.com/v1/groups/2642914/roles',
'headers': {
}
};
request(options, function (error, response) {
if (error) console.error(error);
var obj = JSON.parse(response.body);
var rolesList = jp.value(obj, '$.roles');
rolesList.sort(function(a, b) {
return a.rank - b.rank;
});
console.log(rolesList)
});https://stackoverflow.com/questions/62725100
复制相似问题