比起 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"}]
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'}}]]
代码:
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);
最后,推荐在数据解析方面使用阿里的fastjson开源库,号称目前最快的解析库,使用上也比较简单,和Gson基本类似,详情参见
https://github.com/alibaba/fastjson。有详细的使用文档和样例。