android通用JSON解析

  1. ackage cn.com.pcgroup.<a href="http://lib.csdn.net/base/15" class="replace_word" title="Android知识库" target="_blank" style="color:#df3434; font-weight:bold;">android</a>.browser.module.onlineproduct;
  2. import <a href="http://lib.csdn.net/base/17" class="replace_word" title="Java EE知识库" target="_blank" style="color:#df3434; font-weight:bold;">java</a>.io.IOException;
  3. import java.net.HttpURLConnection;
  4. import java.net.URL;
  5. import java.nio.ByteBuffer;
  6. import java.nio.channels.Channels;
  7. import java.nio.channels.ReadableByteChannel;
  8. import java.util.ArrayList;
  9. import java.util.HashMap;
  10. import java.util.Iterator;
  11. import java.util.List;
  12. import java.util.Map;
  13. import java.util.concurrent.Callable;
  14. import java.util.concurrent.ExecutorService;
  15. import java.util.concurrent.Executors;
  16. import java.util.concurrent.Future;
  17. import org.json.JSONArray;
  18. import org.json.JSONObject;
  19. import android.app.Activity;
  20. import android.os.Bundle;
  21. import android.util.Log;
  22. import android.view.LayoutInflater;
  23. import android.view.View;
  24. import android.view.ViewGroup;
  25. import android.widget.BaseAdapter;
  26. import android.widget.ListView;
  27. import android.widget.TextView;
  28. import cn.com.pcgroup.android.browser.R;
  29. public class Information extends Activity {
  30. private static final String baseUrl = "http://192.168.199.45/1.txt";
  31. private static final String TAG = Information.class.getSimpleName();
  32. private static LayoutInflater mInflater;
  33. private static String json;
  34. private Map<String, String> infoMap = new HashMap<String, String>();
  35. private static Map<Index, String> itemMap = new HashMap<Index, String>();
  36. @Override
  37. protected void onCreate(Bundle savedInstanceState) {
  38. super.onCreate(savedInstanceState);
  39. setContentView(R.layout.online_product_information);
  40. ListView list = (ListView) findViewById(R.id.list);
  41. mInflater = getWindow().getLayoutInflater();
  42. try {
  43. json = downloadJSON().get();
  44. Log.v(TAG, json);
  45. JSONObject jsonObject = new JSONObject(json);
  46. handleJson(jsonObject, infoMap);
  47. Index i = new Index();
  48. i.setKey("image");
  49. i.setPos(1);
  50. String result = itemMap.get(i);
  51. Log.v(TAG, "result = " + result);
  52. Log.v(TAG, "productId = " + infoMap.get("productId"));
  53. Log.v(TAG, "itemCount = " + itemCount);
  54. InforAdapter adapter = new InforAdapter(itemCount);
  55. list.setAdapter(adapter);
  56. } catch (Exception e) {
  57. throw new RuntimeException(e);
  58. }
  59. }
  60. private void handleJson(JSONObject jsonObject, Map<String, String> infoMap) {
  61. if (jsonObject == null || infoMap == null)
  62. return;
  63. @SuppressWarnings("unchecked")
  64. Iterator<String> it = jsonObject.keys();
  65. while (it.hasNext()) {
  66. String key = it.next();
  67. JSONArray array = jsonObject.optJSONArray(key);
  68. // 假如只是JSONObject
  69. if (array == null)
  70. infoMap.put(key, jsonObject.optString(key));
  71. // 是JSONArray,则递归处理
  72. else {
  73. handleJsonArray(array, itemMap);
  74. }
  75. }
  76. }
  77. private static class Index {
  78. private int pos = 0;
  79. private String key = new String();
  80. public Index() {
  81. }
  82. public Index(int pos, String key) {
  83. this.pos = pos;
  84. this.key = key;
  85. }
  86. @Override
  87. public int hashCode() {
  88. final int prime = 31;
  89. int result = 1;
  90. result = prime * result + ((key == null) ? 0 : key.hashCode());
  91. result = prime * result + pos;
  92. return result;
  93. }
  94. @Override
  95. public boolean equals(Object obj) {
  96. if (obj == this)
  97. return true;
  98. if (obj instanceof Index)
  99. return ((Index) obj).pos == pos
  100. && (((Index) obj).key).equals(key);
  101. return false;
  102. }
  103. public int getPos() {
  104. return pos;
  105. }
  106. public void setPos(int pos) {
  107. this.pos = pos;
  108. }
  109. public String getKey() {
  110. return key;
  111. }
  112. public void setKey(String key) {
  113. this.key = key;
  114. }
  115. }
  116. private int itemCount = 0;
  117. private int handleJsonArray(JSONArray array, Map<Index, String> map) {
  118. if (array == null)
  119. return itemCount;
  120. int len = array.length();
  121. itemCount = len;
  122. for (int i = 0; i < len; i++) {
  123. JSONObject obj = (JSONObject) array.opt(i);
  124. @SuppressWarnings("unchecked")
  125. Iterator<String> it = obj.keys();
  126. while (it.hasNext()) {
  127. String key = it.next();
  128. JSONArray a = obj.optJSONArray(key);
  129. if (a != null)
  130. handleJsonArray(a, itemMap);
  131. else {
  132. Index index = new Index(i, key);
  133. itemMap.put(index, obj.optString(key));
  134. }
  135. }
  136. }
  137. return itemCount;
  138. }
  139. private static class InforAdapter extends BaseAdapter {
  140. private int count; // 有几条数据
  141. String[] sa = { "id", "title", "image", "channel" };
  142. public InforAdapter(int count) {
  143. this.count = count;
  144. }
  145. @Override
  146. public int getCount() {
  147. return count;
  148. }
  149. @Override
  150. public Object getItem(int position) {
  151. return position;
  152. }
  153. @Override
  154. public long getItemId(int position) {
  155. return position;
  156. }
  157. @Override
  158. public View getView(int position, View convertView, ViewGroup parent) {
  159. if (convertView == null) {
  160. convertView = mInflater.inflate(R.layout.information_layout,
  161. null);
  162. }
  163. TextView t = (TextView) convertView.findViewById(R.id.text);
  164. t.setTextSize(20);
  165. Index i = new Index(position, "title");
  166. t.setText(itemMap.get(i));
  167. return convertView;
  168. }
  169. }
  170. @SuppressWarnings({ "finally", "unused" })
  171. private String getStringFromServer(final String url){
  172. ReadableByteChannel channel = null;
  173. StringBuilder sb = null;
  174. try {
  175. URL u = new URL(url);
  176. HttpURLConnection conn = (HttpURLConnection) u.openConnection();
  177. channel = Channels.newChannel(conn.getInputStream());
  178. ByteBuffer buffer = ByteBuffer.allocate(1024);
  179. sb = new StringBuilder();
  180. while(channel.read(buffer) != -1){
  181. buffer.flip();
  182. while(buffer.hasRemaining())
  183. sb.append((char)buffer.get());
  184. buffer.clear();
  185. }
  186. } catch (Exception e) {
  187. throw new RuntimeException(e);
  188. }finally{
  189. try {
  190. channel.close();
  191. } catch (IOException e) {
  192. e.printStackTrace();
  193. }finally{
  194. return sb.toString();
  195. }
  196. }
  197. }
  198. private Future<String> downloadJSON(){
  199. ExecutorService exec = Executors.newCachedThreadPool();
  200. class DownLoadTask implements Callable<String>{
  201. @SuppressWarnings("static-access")
  202. @Override
  203. public String call() {
  204. json = OnlineApiService.getInstance(Information.this).getJSONString(baseUrl);
  205. return json;
  206. }
  207. }
  208. Future<String> future = exec.submit(new DownLoadTask());
  209. exec.shutdown();
  210. return future;
  211. }
  212. }
时间: 2024-10-14 07:53:48

android通用JSON解析的相关文章

Android 之json解析2

JSON(JavaScript Object Notation) 定义:字符串 键值对 解析方法有JSON,谷歌GSON,阿里巴巴FastJSON 一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性. 业内主流技术为其提供了完整的解决方案(有点类似于正则表达式,获得了当今大部分语言的支持),从而可以在不同平台间进行数据交换. JSON采用兼容性很高的文本格式,同时也具备类似于C语言体系的行为. Json建构于两种结构: 1.“名称/值”对的集合(A collection of name

Android项目--Json解析

在过去的一段时间里,我希望做一个天气的应用,但是由于老版的天气接口已经不能用了.只能更新到2014年3月4日. 不过有些东西,哪来学习一下,也是可以的. 比如:http://m.weather.com.cn/data/101050101.html { "weatherinfo": { "city": "哈尔滨", "city_en": "haerbin", "date_y": "

Android之JSON解析

做个Android网络编程的同学一定对于JSON解析一点都不陌生,因为现在我们通过手机向服务器请求资源,服务器给我们返回的数据资源一般都是以JSON格式返回,当然还有一些通过XML格式返回,相对JSON格式,XML格式的数据在处理时相对比较繁琐,并且Android为我们提供了两个解析JSON对象的类:JSONObject与JSONArray这两个对象可以很好的满足我们的需求,JSONArray对象可以以数组的形式将数据返回到手机,JSONObject对象则可以以对象的形式将数据为我们封装好返回,

浅谈Android项目----JSON解析(4种解析技术详解)

json简介 1.概念:json全称是javaScript object Notation,是一种并轻量级的数据交换格式. 2.特点: 1.本质就是具有特定格式的字符串 2.json完全独立于编程语言 3.json比xml数据传输的有效性要高出很多 Android系统也原生的提供了JSON解析的API,但是它的速度很慢,而且没有提供简介方便的接口来提高开发者的效率和降低出错的可能.因此,通常情况下,我们都会选择其他优秀的JSON解析实现,用以替代系统的API,目前JSON解析的开源实现主要包括一

Android平台json解析(FastJson Gson 大比拼)

前言: 最近为了统一项目中使用的框架,发现项目中用到了两种json解析框架,他们就是当今非常主流的json解析框架:google的Gson 和阿里巴巴的FastJson,为了废除其中一个所以来个性能和使用的大比拼. FastJson 当前使用版本 fastjson-1.2.11.jar 下载地址http://repo1.maven.org/maven2/com/alibaba/fastjson/1.2.11/ 对象转化成json: /** * 对象转化为json fastjson 使用方式 *

android的json解析

转http://blog.csdn.net/qxs965266509/article/details/42774691 Google Gson的使用方法,实现Json结构的相互转换 分类: android Json2015-01-16 12:03 884人阅读 评论(0) 收藏 举报 在Java开发中,有时需要保存一个数据结构成字符串,可能你会考虑用Json,但是当Json字符串转换成Java对象时,转换成的是JsonObject,并不是你想要的Class类型的对象,操作起来就很不是愉悦,下面说

android复杂json解析

JSON建构有两种结构:对象和数组 json简单说就是javascript中的对象和数组,所以这两种结构就是对象和数组2种结构,通过这两种结构可以表示各种复杂的结构. 以下是项目中的一段json格式,也并不算很复杂,贴出解析方式和思路: { "result":true,"msgType":3,"count":16,"batchId":"hb20140711", "companyFullName&q

Android之JSON格式数据解析

查看原文:http://blog.csdn.net/hantangsongming/article/details/42234293 JSON:JavaScript 对象表示法(JavaScript Object Notation).独立于语言和平台,比 XML 更小.更快,更易解析.如今JSON数据已经成为了互联网中大多数数据的传递方式,所以必须要熟练掌握. Android平台自带了JSON解析的相关API,可以将文件.输入流中的数据转化为JSON对象,然后从对象中获取JSON保存的数据内容.

android json解析及简单例子

JSON的定义: 一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性.业内主流技术为其提供了完整的解决方案(有点类似于正则表达式 ,获得了当今大部分语言的支持),从而可以在不同平台间进行数据交换.JSON采用兼容性很高的文本格式,同时也具备类似于C语言体系的行为. – Json.org JSON Vs XML 1.JSON和XML的数据可读性基本相同 2.JSON和XML同样拥有丰富的解析手段 3.JSON相对于XML来讲,数据的体积小 4.JSON与JavaScript的交互更加方便