Java(Android) - Json 解析器的最佳 class 示例是什么?

Java(Android) - What is best class example for Json parser?

我的 android 应用程序必须解析多种类型的 json 文本,例如如下所示。

{
    "text": "Hello World !",
    "site": "http://helloworld.com"
}

所以我想制作一个 class 来管理此应用程序必须解析的每个 json 文本。像 "JsonUtil.java"

我把class做成了这样。

public class JsonUtil {

    public static final String TAG = JsonUtil.class.getSimpleName();

    public JsonUtil() {
    }

    public NotificationAd parseNotificationAd(JSONObject jsonObject) {
        NotificationAd notificationAd = new NotificationAd();
        try {
            notificationAd.message = jsonObject.getString("text");
            notificationAd.targetUrl = jsonObject.getString("site");
        } catch (Exception e) {
            e.printStackTrace();
        }
        Log.i(TAG, "parseNotificationAd, notificationAd: " + notificationAd.toString());
        return notificationAd;
    }

    public class NotificationAd {
        public String message;
        public String targetUrl;

        @Override
        public String toString() {
            return String.format("message: %s, targetUrl: %s", message, targetUrl);
        }
    }

}

我使用嵌套 class 的原因太多了 "VO.java" classes 会刺激整个包结构(我不知道为什么,只是我的口味 :P 太多了class这些让我很复杂。)

所以用法是这样的,

JsonUtil.NotificationAd notificationAd = new JsonUtil().parseNotificationAd(response);
String message = notificationAd.message;
String targetUrl = notificationAd.targetUrl;

我想知道我是否正确,实际上我想将 class 设为 "abstract",并将方法设为 "static",如下所示。

public abstract class JsonUtil {

    public static final String TAG = JsonUtil.class.getSimpleName();

    public static NotificationAd parseNotificationAd(JSONObject jsonObject) {
        NotificationAd notificationAd = new NotificationAd();
        try {
            notificationAd.message = jsonObject.getString("text");
            notificationAd.targetUrl = jsonObject.getString("site");
        } catch (Exception e) {
            e.printStackTrace();
        }
        Log.i(TAG, "parseNotificationAd, notificationAd: " + notificationAd.toString());
        return notificationAd;
    }

    public static class NotificationAd {
        public String message;
        public String targetUrl;

        @Override
        public String toString() {
            return String.format("message: %s, targetUrl: %s", message, targetUrl);
        }
    }

}

但是我认为下一个代码有一些内存问题(这一点是我需要一些帮助。我不专业JAVA)。

谁能建议 android 中 Json 解析器的最佳实践?

(我知道 Retrofit 库,但请不要在这个问题中提及它 :P)

非常感谢您的每一个回答!

看看这个:看看这个:http://www.technotalkative.com/lazy-productive-android-developer-3/

查看这个简单易用的教程Getting Started with GSON

您可以使用 Gradle 在项目中包含 GSON 依赖项:

compile 'com.google.code.gson:gson:2.3.1'

根据您的示例数据,只需使用 Gson。此方法显示了使用 StringJSONObject

json 变为 Gson 的两种不同方法
public class Main {

    public static void main(String[] args) {
        new Main().gsonExample();
    }

    /* Sample data
    {
    "text": "Hello World !",
    "site": "http://helloworld.com"
    }
     */
    private void gsonExample() {
        // sample data without the pretty printing
        String jsonText = "{\"text\": \"Hello World !\",\"site\": \"http://helloworld.com\"}";

        // manually convert
        JsonObject jsonObject = new JsonObject();
        jsonObject.addProperty("text", "Hello World !");
        jsonObject.addProperty("site", "http://helloworld.com");

        // assert the generated json is equal to the sample data
        assert jsonObject.toString().equals(jsonText);

        Model modelFromJsonObject = new Gson().fromJson(jsonObject.toString(), Model.class);
        Model model = new Gson().fromJson(jsonText, Model.class);
        // assert the two models are equals
        assert modelFromJsonObject.equals(model);

        // assert the text is set correctly
        assert  "Hello World !".equals(model.text);

        System.out.println("All tests passed!");
    }

    public static class Model {
        public String text;
        public String site;
    }
}