我无法对付Json

时间:2014-12-22 03:42:17

标签: android android-json

我决定使用新的数据Json项目。在此之前我使用了XML(库Jsoup)。我找到了一个图书馆ion

有了它,我可以轻松地以String或Json的形式获取数据。 现在的问题。当我继续处理这些数据时?使用XML时,我使用XML中的相同字段创建了一个类bean。然后使用这些类的数组。但我看到有一个android org.json.JSONObject;

我可以直接使用这些对象,还是需要将所有数据放入类中?如果我能做什么是对的?

换句话说,更正此代码?:

Ion.with(getActivity())
                .load(my link)
                .asJsonObject()
                .setCallback(new FutureCallback<JsonObject>() {
                    @Override
                    public void onCompleted(Exception e, JsonObject result) {
                        // do stuff with the result or error
                        Toast.makeText(getActivity(), result.getAsJsonObject("person").get("1").toString(), Toast.LENGTH_LONG).show();
                        name.setText(result.getAsJsonObject("person").getAsJsonObject("1").get("name").toString());
                        age.setText(result.getAsJsonObject("person").getAsJsonObject("1").get("age").toString());
                    }
                });

编辑:

我发现这个库不是手动从服务器下载数据。据我所知,这个过程分为两个阶段。 1.从服务器获取数据。 2.解析获得的数据。在第一种情况下通常是手动写入数据采集。例如:

private String readString(HttpEntity entity) throws IOException {
        // open streams
        InputStream in = null;
        boolean success = true;
        IOException readException = null;
        in = entity.getContent();

        ByteArrayOutputStream out = new ByteArrayOutputStream();

        // progress vars
        int total = (int)entity.getContentLength();
        int current = 0;

        // fetch response
        byte[] buff = new byte[1024];
        int read;
        while ((read = in.read(buff)) != -1) {
            out.write(buff, 0, read);
            current += read;
            if(progressListener != null) progressListener.onProgress(total, current);
        }
        out.flush();

        String result = new String(out.toByteArray(), "UTF-8").trim();

        in.close();
        out.close();

        return result;

    }

图书馆简化了这一点。第二阶段 - 解析。但是图书馆已经以Json格式提供了数据。那么,您是否想要做其他事情,或者您可以使用生成的对象来工作?

2 个答案:

答案 0 :(得分:0)

正如它在README.md中说的那样:

Ion.with(context)
.load("http://example.com/thing.json")
.asJsonObject()
.setCallback(new FutureCallback<JsonObject>() {
   @Override
    public void onCompleted(Exception e, JsonObject result) {
        // do stuff with the result or error
    }
});  
onCompleted

你有一个JsonObject
想象你的json是这样的(你不知道你的josn怎么样):

{

    "menu":{
        "id":"file",
        "value":"File",
    }

}

你可以像这样解析这个json:

String menu = result.getString("menu"); 
JSONObject jsonMenu = new JSONObject("menu");// get menue as another json object
String id = jsonMenu.getLong("id"); // get a long value from a josn object
Long value = data.getString("value"); // get a string value from josn

它是关于android中的json的一个很好的教程:
Android JSON Parser Tutorial

答案 1 :(得分:0)

用于连接服务器并获取(或发送)json数据: 最好使用最流行的图书馆,如排球图书馆或okhttp v ...(你也可以一起使用它们) 比较这个库看到以下链接: Comparison of Android networking libraries: OkHTTP, Retrofit, and Volley

你可以在:

中阅读有关凌空图书馆的内容

http://developer.android.com/training/volley/index.html

http://www.androidhive.info/2014/05/android-working-with-volley-library-1/

(我正在使用凌空,它支持json请求)

在将json对象发送到服务器之前,在从您的案例中作为json对象的服务器获取响应之后,您可能希望使用json对象并将它们转换为您的对象,反之亦然,您可以使用JSON库或Jackson库这个 根据{{​​3}}:

  

Jackson是一个用于将对象转换为JSON的Java库,反之亦然。 Gson是解决这个问题的流行选择,但我们发现Jackson更具性能,因为它支持处理JSON的其他方式:流式传输,内存中树模型和传统的JSON-POJO数据绑定。但请记住,Jackson是一个比GSON更大的库,因此根据您的情况,您可能更喜欢GSON以避免65k方法的限制。其他选择:Json-smart和Boon JSON

您可以从以下链接获取JSON库: https://github.com/futurice/android-best-practices

但是如果你想要离子库的繁琐工作说要编辑我的答案;)

抱歉我的英语不好。