使用JAQL从Facebook分析数据中按ID查询页面名称的问题
JAQL查询Facebook数据:根据ID获取对应页面名称的正确方法
我来帮你解决这个JAQL查询的问题。首先,先确认下你提供的JSON数据:
[{ id: '1071142589616282', name: 'kps', likes: { data: [ { name: 'first_name', id: '327945414026898', created_time: '2018-03-27T20:41:50+0000' }, { name: 'second name', id: '180392125340045', created_time: '2010-11-22T06:36:33+0000' }, { name: 'third name', id: '149186111778540', created_time: '2010-10-07T11:25:22+0000' } ] } }]
你的原查询data1[0] -> filter $.likes.data[*].id =='327945414026898'没有输出的原因很明确:你在外层用户对象上执行过滤,而$.likes.data[*].id会返回一个包含所有点赞ID的数组(比如['327945414026898', '180392125340045', ...]),用数组和单个字符串直接==比较永远不会成立,自然没有匹配结果。
正确的查询方式
我们需要深入到likes.data数组内部,直接针对数组元素做过滤,再提取对应的name字段:
data1[0].likes.data -> filter $.id == '327945414026898' -> project $.name
分步拆解:
- 定位目标数组:
data1[0].likes.data直接指向点赞数据的数组,让过滤操作精准作用在每一条点赞记录上。 - 筛选匹配ID的元素:
filter $.id == '327945414026898'会挑出数组中id完全匹配目标值的对象。 - 提取需要的字段:
project $.name只保留我们要的name字段,最终输出就是"first_name"。
如果想直接拿到单个字符串结果(而非包含值的数组),可以再加个[0]取结果的第一个元素(因为ID是唯一的,只会有一个匹配项):
(data1[0].likes.data -> filter $.id == '327945414026898' -> project $.name)[0]
这样执行后就会直接返回first_name这个字符串。
内容的提问来源于stack exchange,提问作者Kotha Praneeth Sai
相关产品推荐
相关产品推荐

