我使用Jsoup.parse()
来解析this data。一切都很好,但需要很长时间。
例如,此数据需要20秒。用于解析。是否有其他解决方案满足我的需求?
代码:
rezult = Jsoup.parse(res.parse().outerHtml(), "UTF-8").text();
res
Jsoup.parse()
来自link的文字。
===========更新=============
我将此变量与Jsoup.parse()
分开,并了解它是问题的根源。这需要20秒,而不是String tmp = res.parse().outerHtml();
。
rezult = Jsoup.parse(tmp, "UTF-8").text();
而这只需要1秒钟。
Jsoup.parse()
我使用此代码从此链接获取数据。我使用<html>
<head></head>
<body>
{"success":true,"currentUser":43743,"careTypes":[{"id":1,"name":"\u0421\u0442\u0438\u0440\u043a\u0430","description":"\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0441\u0442\u0438\u0440\u043a\u0438 \u043f\u043e\u044f\u0432\u0438\u0442\u0441\u044f \u0437\u0434\u0435\u0441\u044c, \u043a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u044b \u0432\u044b\u0431\u0435\u0440\u0435\u0442\u0435 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u043c\u044b\u0439 \u0440\u0435\u0436\u0438\u043c."},{"id":2,"name":"\u041e\u0442\u0431\u0435\u043b\u0438\u0432\u0430\u043d\u0438\u0435","description":"\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043e\u0442\u0431\u0435\u043b\u0438\u0432\u0430\u043d\u0438\u044f \u043f\u043e\u044f\u0432\u0438\u0442\u0441\u044f \u0437\u0434\u0435\u0441\u044c, \u043a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u044b \u0432\u044b\u0431\u0435\u0440\u0435\u0442\u0435
因为没有它我得到这样的东西:
{"success":true,"currentUser":43743,"careTypes":[{"id":1,"name":"\u0421\u0442\u0438\u0440\u043a\u0430","description":"\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0441\u0442\u0438\u0440\u043a\u0438 \u043f\u043e\u044f\u0432\u0438\u0442\u0441\u044f \u0437\u0434\u0435\u0441\u044c, \u043a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u044b \u0432\u044b\u0431\u0435\u0440\u0435\u0442\u0435 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u043c\u044b\u0439 \u0440\u0435\u0436\u0438\u043c."},{"id":2,"name":"\u041e\u0442\u0431\u0435\u043b\u0438\u0432\u0430\u043d\u0438\u0435","description":"\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043e\u0442\u0431\u0435\u043b\u0438\u0432\u0430\u043d\u0438\u044f \u043f\u043e\u044f\u0432\u0438\u0442\u0441\u044f \u0437\u0434\u0435\u0441\u044c, \u043a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u044b \u0432\u044b\u0431\u0435\u0440\u0435\u0442\u0435
而不是这个:
res.parse()
但现在主要的问题是将 long t2 = System.currentTimeMillis();
try {
Connection connection = Jsoup.connect(url)
.method(Connection.Method.POST)
.cookies(cookies)
.timeout(30000)
.ignoreContentType(true);
if (data != null) {
connection.data(data);
}
res = connection.execute();
Logger.d(System.currentTimeMillis() - t2 + " = connection.execute");
long t6 = System.currentTimeMillis();
String tmp = res.parse().outerHtml();
Logger.d(System.currentTimeMillis() - t6 + " = res.parse().outerHtml()");
long t4 = System.currentTimeMillis();
rezult = Jsoup.parse(tmp, "UTF-8").text();
Logger.d(System.currentTimeMillis() - t4 + " = Jsoup.parse");
方法更改为其他更少执行时间的方法。
===========更新2 =============
1588 = connection.execute
16150 = res.parse().outerHtml()
1466 = Jsoup.parse
我在Logcat中得到了什么:
{{1}}
答案 0 :(得分:0)
使用eval()
。另外,请确保源eval()
是安全的。 eval()
将尝试评估任何语句,因此可能会导致安全问题未正确使用
答案 1 :(得分:0)
我找到了解决这个问题的方法。
Jsoup
lib中还有其他方法可以在不解析的情况下获取页面内容。
解决方案是改变这一行:
String tmp = res.parse().outerHtml();
在这一行:
String tmp = res.body();
20次真的快了。可能是他们做了不同的工作,但在我的需要中也是如此。