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
。此方法显示了使用 String
或 JSONObject
将 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;
}
}
我的 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
。此方法显示了使用 String
或 JSONObject
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;
}
}