android java json_android - 如何解析Java HTTPResponse中的JSON?

android - 如何解析Java HTTPResponse中的JSON?

我有一个HttpResponse对象用于我刚刚制作的Web请求。 响应采用JSON格式,因此我需要解析它。 我可以以荒谬复杂的方式做到这一点,但似乎必须有更好的方法。

这真的是我能做的最好的吗?

HttpResponse response; // some response object

Reader in = new BufferedReader(

new InputStreamReader(response.getEntity().getContent(), "UTF-8"));

StringBuilder builder= new StringBuilder();

char[] buf = new char[1000];

int l = 0;

while (l >= 0) {

builder.append(buf, 0, l);

l = in.read(buf);

}

JSONTokener tokener = new JSONTokener( builder.toString() );

JSONArray finalResult = new JSONArray( tokener );

我在Android上,如果这有任何区别。

7个解决方案

83 votes

可以更有效地完成两件事:

使用StringBuilder而不是BufferedReader#readLine(),因为它是更快更年轻的兄弟。

使用BufferedReader#readLine()逐行读取它而不是通过char读取它。

HttpResponse response; // some response object

BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent(), "UTF-8"));

StringBuilder builder = new StringBuilder();

for (String line = null; (line = reader.readLine()) != null;) {

builder.append(line).append("\n");

}

JSONTokener tokener = new JSONTokener(builder.toString());

JSONArray finalResult = new JSONArray(tokener);

如果JSON实际上是一行,那么您也可以删除循环和构建器。

HttpResponse response; // some response object

BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent(), "UTF-8"));

String json = reader.readLine();

JSONTokener tokener = new JSONTokener(json);

JSONArray finalResult = new JSONArray(tokener);

BalusC answered 2019-06-07T07:18:51Z

9 votes

使用JSON Simple,

[http://code.google.com/p/json-simple/]

它有一个小的足迹,没有依赖性,所以它非常适合Android。

你可以这样做,

Object obj=JSONValue.parse(buffer.tString());

JSONArray finalResult=(JSONArray)obj;

ZZ Coder answered 2019-06-07T07:19:37Z

5 votes

您可以使用Gson库进行解析

void getJson() throws IOException {

HttpClient httpClient = new DefaultHttpClient();

HttpGet httpGet = new HttpGet("some url of json");

HttpResponse httpResponse = httpClient.execute(httpGet);

String response = EntityUtils.toString(httpResponse.getEntity());

Gson gson = new Gson();

MyClass myClassObj = gson.fromJson(response, MyClass.class);

}

这里是从服务器获取的示例json文件

{

"id":5,

"name":"kitkat",

"version":"4.4"

}

这是我的课

class MyClass{

int id;

String name;

String version;

}

参考这个

Rajesh Batth answered 2019-06-07T07:20:23Z

2 votes

杰克逊似乎直接从InputStream支持一些JSON解析。我的理解是它在Android上运行并且相当快。 另一方面,它是一个额外的JAR包含在您的应用程序中,增加了下载和闪存大小。

CommonsWare answered 2019-06-07T07:20:49Z

0 votes

而不是做

Reader in = new BufferedReader(

new InputStreamReader(response.getEntity().getContent(), "UTF-8"));

StringBuilder builder= new StringBuilder();

char[] buf = new char[1000];

int l = 0;

while (l >= 0) {

builder.append(buf, 0, l);

l = in.read(buf);

}

JSONTokener tokener = new JSONTokener( builder.toString() );

你可以做:

JSONTokener tokener = new JSONTokener(

IOUtils.toString(response.getEntity().getContent()) );

其中IOUtils来自commons IO库。

Jove Kuang answered 2019-06-07T07:21:19Z

0 votes

对于Android,使用Apache的Commons IO Library for IOUtils:

// connection is a HttpURLConnection

InputStream inputStream = connection.getInputStream()

ByteArrayOutputStream baos = new ByteArrayOutputStream();

IOUtils.copy(inputStream, baos);

JSONObject jsonObject = new JSONObject(baos.toString()); // JSONObject is part of Android library

Jonathan Lin answered 2019-06-07T07:21:45Z

-3 votes

没有必要自己做读者循环。 JsonTokener内置了这个功能。

ttpResponse response; // some response object

BufferedReader reader = new BufferedReader(new

JSONTokener tokener = new JSONTokener(reader);

JSONArray finalResult = new JSONArray(tokener);

guido answered 2019-06-07T07:22:11Z

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值