Jsoup.parse()方法的替代方案

Val*_*Val 6 html parsing android json jsoup

Jsoup.parse()用来解析这些数据.一切都很好,但需要很长时间.

例如,此数据需要20秒.用于解析.是否有其他解决方案满足我的需求?

码:

rezult = Jsoup.parse(res.parse().outerHtml(), "UTF-8").text();
Run Code Online (Sandbox Code Playgroud)

res它从文字链接.

===========更新=============

我将这个变量分开Jsoup.parse()并理解它是问题的根源.它需要20秒,而不是Jsoup.parse().

String tmp = res.parse().outerHtml();
Run Code Online (Sandbox Code Playgroud)

这只需要1秒:

rezult = Jsoup.parse(tmp, "UTF-8").text();
Run Code Online (Sandbox Code Playgroud)

我使用此代码从此链接获取数据.我使用Jsoup.parse()因为没有它我得到这样的东西:

<html>
    <head></head>
    <body>
    {&quot;success&quot;:true,&quot;currentUser&quot;:43743,&quot;careTypes&quot;:[{&quot;id&quot;:1,&quot;name&quot;:&quot;\u0421\u0442\u0438\u0440\u043a\u0430&quot;,&quot;description&quot;:&quot;\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.&quot;},{&quot;id&quot;:2,&quot;name&quot;:&quot;\u041e\u0442\u0431\u0435\u043b\u0438\u0432\u0430\u043d\u0438\u0435&quot;,&quot;description&quot;:&quot;\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 
Run Code Online (Sandbox Code Playgroud)

相反:

{"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 
Run Code Online (Sandbox Code Playgroud)

但现在主要的问题是将res.parse()方法更改为其他更少的执行时间.

===========更新2 =============

 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");
Run Code Online (Sandbox Code Playgroud)

我在Logcat中得到了什么:

1588 = connection.execute
16150 = res.parse().outerHtml()
1466 = Jsoup.parse
Run Code Online (Sandbox Code Playgroud)

Val*_*Val 0

我找到了这个问题的解决方案。

lib中还有其他方法Jsoup可以获取页面内容而不进行解析。

解决方案是更改这一行:

String tmp = res.parse().outerHtml();
Run Code Online (Sandbox Code Playgroud)

在这一行:

String tmp = res.body();
Run Code Online (Sandbox Code Playgroud)

确实快了20倍。可能他们做的工作不同,但在我的需求中是相同的。