首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用Json的排序函数?

如何使用Json的排序函数?
EN

Stack Overflow用户
提问于 2020-07-04 03:54:19
回答 1查看 79关注 0票数 0

我正在使用按属性值对对象数组进行排序的代码对我的Json进行排序。但是它不起作用,我使用请求从web中存储Json,并使用jsonpath。

这不是排序,它只是给我发送GET内容(排序之前)。我觉得这是parseFloat (第15行)的问题所在,但我不知道如何修复它。我进入https://jsonpath.com/是为了测试一点,应该是..rank而不是.rank

我的代码:

代码语言:javascript
运行
复制
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)
});
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-04 04:54:58

.query总是返回所有匹配的数组。

在obj匹配的pathExpression中查找元素。返回满足所提供的JSONPath表达式的元素数组,如果没有匹配,则返回空数组。如果指定,只返回第一个计数元素。

您是从jsonpath查询rolesList = [ [{... rank: ...}, {}, {} ...] ]获得的,因此排序是对单个元素数组执行的。

您可以使用.value来获得第一个匹配项。

$..roles是不必要的,除非您需要获得任意嵌套级别的属性,这里不是这种情况。在第一层是可以到达的。

我在任何地方都使用了CORS,因此可以在浏览器(这里的密码箱)中运行:

代码语言:javascript
运行
复制
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)
});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62725100

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档