如何使用 Gson 将 JSON 读取为字符串?
How do I read JSON as String with Gson?
我从 WebService
得到一个 Json,我想在我的 LogCat 中将它打印为 String
。我尝试了以下方法:
Gson gson = new Gson();
HttpEntity getResponseEntity = httpResponse.getEntity();
InputStream is = getResponseEntity.getContent();
Reader reader = new InputStreamReader(is);
Type snsType = new TypeToken<SNSRegister>(){}.getType();
snsRegister = gson.fromJson(reader, snsType);
String jsonString = convertStreamToString(is);
snsRegister
是我的可序列化 class 的一个实例,我试图通过转换 InputStream
对象在我的 logcat 中打印 JSON使用 convertStreamtoString
方法 String
:
static String convertStreamToString(java.io.InputStream is) {
java.util.Scanner s = new java.util.Scanner(is).useDelimiter("\A");
return s.hasNext() ? s.next() : "";
}
但是我的字符串总是空的,我不知道为什么。 snsRegister
不为空,所以这不是问题所在。
很可能您的流已被 GSON 读取一次。
如果您真的非常想读两遍,您需要 reset()
一个流,但首先您必须 mark()
您想要重置的位置。
但是你想要的只是在 logcat 中打印你的 JSON 只需将 toString()
方法添加到你的 SNSRegister
class 或者更好的用户 Retrofit
日志记录机制。
如果这对您来说真的很重要,Gson
可以参加 String
。
我不建议阅读 Stream
两遍,尽管您可以阅读 mark()
和 reset()
。由于 Gson
除了 Reader
之外还会反序列化 String
,所以你可以像这样将 String
传递给 Gson:
HttpEntity getResponseEntity = httpResponse.getEntity();
InputStream is = getResponseEntity.getContent();
String jsonString = convertStreamToString(is);
Log.i("MyTAG", jsonString);
Gson gson = new Gson();
Type snsType = new TypeToken<SNSRegister>() {}.getType();
snsRegister = gson.fromJson(jsonString, snsType);
我不建议在生产环境中这样做,因为转换为 String
需要大量额外工作。但是显然,您可以暂时使用它进行调试;您目前使用的方式是生产的最佳方式。
另一种选择是使用 gson.toJson()
将 SNSRegister
对象转换回 JSON,但那样会更慢。
我从 WebService
得到一个 Json,我想在我的 LogCat 中将它打印为 String
。我尝试了以下方法:
Gson gson = new Gson();
HttpEntity getResponseEntity = httpResponse.getEntity();
InputStream is = getResponseEntity.getContent();
Reader reader = new InputStreamReader(is);
Type snsType = new TypeToken<SNSRegister>(){}.getType();
snsRegister = gson.fromJson(reader, snsType);
String jsonString = convertStreamToString(is);
snsRegister
是我的可序列化 class 的一个实例,我试图通过转换 InputStream
对象在我的 logcat 中打印 JSON使用 convertStreamtoString
方法 String
:
static String convertStreamToString(java.io.InputStream is) {
java.util.Scanner s = new java.util.Scanner(is).useDelimiter("\A");
return s.hasNext() ? s.next() : "";
}
但是我的字符串总是空的,我不知道为什么。 snsRegister
不为空,所以这不是问题所在。
很可能您的流已被 GSON 读取一次。
如果您真的非常想读两遍,您需要 reset()
一个流,但首先您必须 mark()
您想要重置的位置。
但是你想要的只是在 logcat 中打印你的 JSON 只需将 toString()
方法添加到你的 SNSRegister
class 或者更好的用户 Retrofit
日志记录机制。
如果这对您来说真的很重要,Gson
可以参加 String
。
我不建议阅读 Stream
两遍,尽管您可以阅读 mark()
和 reset()
。由于 Gson
除了 Reader
之外还会反序列化 String
,所以你可以像这样将 String
传递给 Gson:
HttpEntity getResponseEntity = httpResponse.getEntity();
InputStream is = getResponseEntity.getContent();
String jsonString = convertStreamToString(is);
Log.i("MyTAG", jsonString);
Gson gson = new Gson();
Type snsType = new TypeToken<SNSRegister>() {}.getType();
snsRegister = gson.fromJson(jsonString, snsType);
我不建议在生产环境中这样做,因为转换为 String
需要大量额外工作。但是显然,您可以暂时使用它进行调试;您目前使用的方式是生产的最佳方式。
另一种选择是使用 gson.toJson()
将 SNSRegister
对象转换回 JSON,但那样会更慢。