要连接 Web 服务,有两种选择,使用库或 "JSONParser" Class。哪个更好?哪个安全?

To connect with a web-service there is two options, either use a Library or "JSONParser" Class. Which is better? which one is safe?

我问这个是因为我是 android 开发的初学者。

我正在做一个核心银行应用程序,所以我使用 JSON 解析器 class 连接 REST Web 服务,

JSON解析器Class是,

package com.anvinsolutions.digicob_custmate;
import android.util.Log;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.util.HashMap;

public class JSONParser {
String charset = "UTF-8";
HttpURLConnection conn;
DataOutputStream wr;
StringBuilder result;// = new StringBuilder();
URL urlObj;
JSONObject jObj = null;
StringBuilder sbParams;
String paramsString;

public JSONObject makeHttpRequest(String url, String method,
                                  HashMap<String, String> params) {

    sbParams = new StringBuilder();
    int i = 0;
    for (String key : params.keySet()) {
        try {
            if (i != 0){
                sbParams.append("&");
            }
            sbParams.append(key).append("=")
                    .append(URLEncoder.encode(params.get(key), charset));

        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        i++;
    }

    if (method.equals("POST")) {
        // request method is POST
        try {
            urlObj = new URL(url);

            conn = (HttpURLConnection) urlObj.openConnection();

            conn.setDoOutput(true);

            conn.setRequestMethod("POST");

            conn.setRequestProperty("Accept-Charset", charset);

            conn.setReadTimeout(10000);
            conn.setConnectTimeout(15000);

            conn.connect();

            paramsString = sbParams.toString();

            wr = new DataOutputStream(conn.getOutputStream());
            wr.writeBytes(paramsString);
            wr.flush();
            wr.close();

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    else if(method.equals("GET")){
        // request method is GET

        if (sbParams.length() != 0) {
            url += "?" + sbParams.toString();
        }

        try {
            urlObj = new URL(url);

            conn = (HttpURLConnection) urlObj.openConnection();

            conn.setDoOutput(false);

            conn.setRequestMethod("GET");

            conn.setRequestProperty("Accept-Charset", charset);

            conn.setConnectTimeout(15000);

            conn.connect();

        } catch (IOException e) {
            e.printStackTrace();
        }

    }

    try {
        //Receive the response from the server
        InputStream in = new BufferedInputStream(conn.getInputStream());
        BufferedReader reader = new BufferedReader(new InputStreamReader(in));

        result = new StringBuilder(); // add this line
        String line;
        while ((line = reader.readLine()) != null) {
            result.append(line);
        }

        Log.d("JSON Parser", "result: " + result.toString());

    } catch (IOException e) {
        e.printStackTrace();
    }

    conn.disconnect();

    // try parse the string to a JSON object
    try {
        jObj = new JSONObject(result.toString());
    } catch (Exception e) {
        Log.e("JSON Parser", "Error parsing data " + e.toString());
    }

    // return JSON Object
    return jObj;
}
}

如果此方法在安全性和性能方面有任何问题,我会感到困惑吗? 直到现在我还没有尝试过任何库,我只是使用了这个 JSONParaser Class。我认为使用 JSONParser Class..

很容易

使用哪一个? 先感谢您! ;)

您可以通过Google使用GsonParser。https://github.com/google/gson

您好,您可以使用这 3 个库中的任何一个,它们在性能上都同样出色。检查此 link,它会对您有所帮助。快乐学习。

如果你有 REST 服务的交易,最简单的方法是使用 Retrofit 库:https://square.github.io/retrofit/ 使用 Retrofit,您不需要实现 http 调用,它会自动 parses/creates json.

如果您需要更大的灵活性,我建议使用 OkHttp 库 http://square.github.io/okhttp/, which is much simpler than pure HttpUrlConnection in combination with Gson lib https://github.com/google/gson for json parsing/creating.

您从不使用 JSonParser class 连接到 Web 服务。从您的代码来看,您似乎正在使用 Vanilla HttpURLConnection class 来连接服务并使用 JSonParser class 来解析结果,如果您只有几个 Web 请求要在你的申请。

但是既然你说了,它是银行应用程序,你可能不得不考虑可伸缩性、多个请求和类似的东西。您完全可以尝试自己处理它们,但建议的方法是使用可用于 Android 的久经考验的网络库之一。 Retrofit 和 Volley 就是其中的两个,还有更多。要使用的库的选择取决于您的用例。

@AJay 已经指向一个页面进行比较。看看。

接下来,关于解析,性能是关键因素之一。查看下面的 link 以了解您的选项 - http://blog.takipi.com/the-ultimate-json-library-json-simple-vs-gson-vs-jackson-vs-json/

我会说GSon在所有方面都很好。我们在 in-house 产品中广泛使用它。