在Java&;中解析客户端上JSON对象的最佳实践;安卓

在Java&;中解析客户端上JSON对象的最佳实践;安卓,java,android,json,Java,Android,Json,在我的Android客户端中,我希望从服务器接收JSON对象。通过谷歌搜索,我发现了许多不同的可能性,如何最好地解析来自服务器的InputStream,但大多数都编写了自己的解析器。难道没有一个库可以帮我做这个解析吗?或者我应该如何最好地自己实现它?您可以使用内置的。该链接中有一个示例显示了如何使用它 要以字符串形式获取响应,请执行以下操作: InputStream stream = httpResponse.getEntity().getContent(); BufferedReader br

在我的Android客户端中,我希望从服务器接收JSON对象。通过谷歌搜索,我发现了许多不同的可能性,如何最好地解析来自服务器的InputStream,但大多数都编写了自己的解析器。难道没有一个库可以帮我做这个解析吗?或者我应该如何最好地自己实现它?

您可以使用内置的。该链接中有一个示例显示了如何使用它

要以字符串形式获取响应,请执行以下操作:

InputStream stream = httpResponse.getEntity().getContent();
BufferedReader br = new BufferedReader(new InputStreamReader(stream));
StringBuilder sb = new StringBuilder();
String line = null;

while ((line = br.readLine()) != null) {
  sb.append(line + "\n");
}

br.close();
String result = sb.toString();

从Java 7开始,Sun Oracle Java发行版中没有内置任何用于解析JSON的包;对于android,至少有
org.json
,尽管显然有些开发者不喜欢它

当然,有很多第三方选择


我有一个非常轻量级的JSON解析器,可以用来解析HTTP内容流。它是完全免费的,使用风险自负,等等,。有关详细信息,请在我的网站上下载。它在Android VM中应该可以正常工作。

SDK中的Wiktionary示例以InputStream的形式获取内容,将其转换为字符串,然后构造一个新的org.json.JSONObject(字符串)来解析结果

 private static String convertStreamToString(InputStream is) {

        BufferedReader reader = new BufferedReader(new InputStreamReader(is));

        StringBuilder sb = new StringBuilder();

        String line = null;

        try {

            while ((line = reader.readLine()) != null) {

                sb.append(line);

            }

        } catch (IOException e) {

            e.printStackTrace();

        } finally {

            try {

                is.close();

            } catch (IOException e) {

                e.printStackTrace();

            }

        }

        return sb.toString();

    }

您可以通过以下代码将输入解析为json。。。希望这对你有用你在开玩笑吗?Java平台上有十几个JSON解析器,大多数都可以在Android上正常工作(请参阅)。两个最常用的建议选项是and,它们都很好地让您不仅可以解析和编写JSON,还可以直接与POJO绑定JSON数据。

是的,谢谢!如果我已经有了json对象的字符串,那就好了。但我的部分问题是,我真的不知道正确地将HttpResponse转换成字符串的最佳方法。啊,是的,这可能是一种痛苦。请参见编辑。基本上,你把内容作为一个inputstream,然后把它转换成一个字符串。当大多数解析器只需要一个inputstream就可以解析内容时,你到底为什么要这样做呢?正如你所看到的,差不多一年前我问过这个问题。但是谢谢你的两个建议。是的,我注意到了。。。但很多时候,人们通过谷歌或相关链接来回答问题。因此,我认为不管怎样,完全开放式的分类是很好的。:)有许多JSON解析器,都打包在Sun Java发行版和/或Android发行版中。有关示例,请参见@StaxMan answer。@Gilbert:我特别说过“在Sun Java发行版中”,而不是“为了Sun…”,意思是在Sun发行的JVM中,并用句子结构将其扩展到Android,以表明我对Android不太确定。核心JVM中没有任何JSON解析包。StaxMan指的是第三方软件包(在我看来并不是真正的轻量级软件包)。作为一名android开发者,我向你保证,org.json在android平台上发布的JVM中是可用的(尽管我不建议使用它)。@Gilbert:我修改了我的答案以反映这一点。