Android数据解析之JSON
来源:互联网 发布:查看端口是否的命令 编辑:程序博客网 时间:2024/06/01 08:07
比起 XML,JSON的主要优势在于它的体积更小,在网络上传输的时候可以更省流量。但缺点在于,它的语义性较差,看起来不如XML直观。
假设有如下数据段
[{"id":"5","version":"5.5","name":"Angry Birds"},{"id":"6","version":"7.0","name":"Clash of Clans"},{"id":"7","version":"3.5","name":"Hey Day"}]
首先这里给出最为普通的方法(使用Google官方的JsonArray和JsonObject)
private void parseJSONWithJSONObject(String jsonData) { try { JSONArray jsonArray = new JSONArray(jsonData); for (int i = 0; i < jsonArray.length(); i++) { JSONObject jsonObject = jsonArray.getJSONObject(i); String id = jsonObject.getString("id"); String name = jsonObject.getString("name"); String version = jsonObject.getString("version"); Log.d("MainActivity", "id is " + id); Log.d("MainActivity", "name is " + name); Log.d("MainActivity", "version is " + version); } } catch (Exception e) { e.printStackTrace(); }}在解析的时候,特别注意[]对应数组,{}则对应类
json数据的嵌套解析
在Tomcat下设置一个如下数据的页面,
[{object1:{object3:{id:'01',name:'google'}}},[{object2:{id:'33',name:'horizon'}}]]
显然的,这是一个大数组里面嵌套了多个类与数组,这里使用JSONArray和JSONObject进行解析
代码:
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //tomcat下的数据源地址 getData("http://10.0.2.2:8080/horizon/gson.html"); } public void getData(String url) { //通过volley进行网络请求数据 RequestQueue mQueue = Volley.newRequestQueue(MainActivity.this); JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(url, new Response.Listener<JSONArray>() { @Override public void onResponse(JSONArray response) { parseJSONWithJSONObject(response.toString()); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError volleyError) { } }); mQueue.add(jsonArrayRequest); } private void parseJSONWithJSONObject(String jsonData) { try { //获取最外层数组 JSONArray jsonArray = new JSONArray(jsonData); //在Array中获取Object JSONObject jsonObject = jsonArray.getJSONObject(0); JSONObject googleObject = jsonObject.getJSONObject("object1").getJSONObject("object3"); String googleId = googleObject.getString("id"); String googleName = googleObject.getString("name"); //在Array中获取Array JSONArray horizonArray = jsonArray.getJSONArray(1); JSONObject horizonObject = horizonArray.getJSONObject(0).getJSONObject("object2"); String horizonId = horizonObject.getString("id"); String horizonName = horizonObject.getString("name"); Log.d("MainActivity", "googleId is " + googleId); Log.d("MainActivity", "googleName is " + googleName); Log.d("MainActivity", "horizonId is " + horizonId); Log.d("MainActivity", "horizonName is " + horizonName); } catch (JSONException e1) { e1.printStackTrace(); } }}
结果:
仔细看看其实也不复杂,就是进行Array与Object的嵌套调用,但这看起来繁杂重复的劳动也是有必要省掉的,所以我们再来看看利用开源库的解析思路。
额。。。。,突然看到一篇道友写的GSON嵌套数据解析,非常详细,我就直接给地址了,GSON的嵌套解析。
在使用GSON解析的过程中,思路上还是很简单的,根据你所需要解析的数据情况,将其定义为一个类,然后通过fromjson方法获取该类对象即可。
Gson gson = new Gson();java.lang.reflect.Type type = new TypeToken<JsonBean>() {}.getType();JsonBean jsonBean = gson.fromJson(json, type);
上面的type既可以通过反射获取存储数据的结构的类型也可以直接传入定义完成的类名,即xxx.class以及类对象。
最后,推荐在数据解析方面使用阿里的fastjson开源库,号称目前最快的解析库,使用上也比较简单,和Gson基本类似,详情参见
https://github.com/alibaba/fastjson。有详细的使用文档和样例。
0 0
- Android之解析Json数据
- Android之json数据解析
- Android之json数据解析
- Android之解析Json数据 .
- Android之解析json数据
- Android之json数据解析
- Android之json数据解析
- Android之json数据解析
- Android之json数据解析
- Android之解析json数据
- Android 数据解析之 Json
- android 之 json数据解析
- Android 数据之Json解析
- Android数据解析之JSON
- Android数据解析之JSON
- Android数据之Json解析
- Android之解析json数据
- android数据解析之Json
- 决定成败的,绝对不只是细节
- hdu1402A * B Problem Plus(NTT)
- 蓝牙学习之旅——低功耗蓝牙之广播报文SCAN_RSP
- Mac系统java环境搭建
- js通过document.getElementById获取不到对象
- Android数据解析之JSON
- centos系统swap设置
- Android使用ViewPager实现左右循环滑动及轮播效果
- 如果你失败,那只是代表你还没成功
- Mysql Explain 详解
- java中io操作的注意事项
- bzoj 2081: [Poi2010]Beads
- 使用Fiddler调试你的移动应用后台api接口
- C++ 同步锁