脸书修复了Graph API中的/likes。/likes现在返回喜欢图形中特定对象(照片、相册等)的用户的完整列表。在以前,它只返回3-5个用户。
我的问题是,在不解析整个JSON并获得元素计数的情况下,如何计算"likes“的总数?我只对“赞”数感兴趣;我对点赞的用户不感兴趣。
仅仅计算整个JSON数据集似乎有点昂贵。
例如:https://graph.facebook.com/161820597180936/likes
这张照片很像1,000+喜欢的。
发布于 2011-02-01 18:18:08
既然字符串是JSON,为什么不把它转换成一个标准的.net对象,并在它创建的数组上使用.Count。然后将此信息缓存15分钟或更长时间(取决于您想要的信息的陈旧程度)。
上面的方法相当繁重,因为你基本上要搜索一个字符串未知的次数,返回一个索引,将它与一个int进行比较,添加另一个索引等等。并且上面的C#不起作用(假设您正在演示的是C# )。
改用下面这样的代码:
public static T FromJson<T>(this string s)
{
var ser = new System.Web.Script.Serialization.JavaScriptSerializer.JavaScriptSerializer();
return ser.Deserialize<T>(s);
}这个方法是一个扩展方法,它接受格式正确的JSON字符串,并将其转换为对象T,例如
var result = // call facebook here and get your response string
List<FacebookLikes> likes = result.FromJson <List<FacebookLikes>>();
Response.Write(likes.Count.ToString());
// now cache the likes somewhere, and get from cache next time.我不确定它的性能,没有做任何测试,但对我来说,它看起来更整洁,更具可读性。既然您正在缓存数据,那么我将使用readable,而不是前面的方法。
发布于 2010-12-28 06:33:50
为什么解析整个数据集的成本会很高?这应该需要几毫秒:
public static int CountLikes(string dataSet)
{
int i = 0;
int j = 0;
while ((i = dataSet.IndexOf('"id":', i)) != -1)
{
i += 5;
j++;
}
return j;
}您也可以添加参数limit=#,例如:
https://stackoverflow.com/questions/4002817
复制相似问题