`

JSON数据解析Demo(暂没使用异步)

阅读更多
JSON的定义:


一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性。业内主流技术为其提供了完整的解决方案(有点类似于正则表达式 ,获得了当今大部分语言的支持),从而可以在不同平台间进行数据交换。JSON采用兼容性很高的文本格式,同时也具备类似于C语言体系的行为。 – Json.org

JSON Vs XML

1.JSON和XML的数据可读性基本相同
2.JSON和XML同样拥有丰富的解析手段
3.JSON相对于XML来讲,数据的体积小
4.JSON与JavaScript的交互更加方便
5.JSON对数据的描述性比XML较差
6.JSON的速度要远远快于XML.

运行效果图:
[img]

[/img]
json数据结构图,数据有些多,截两张图:
[img]

[/img]
[img]

[/img]

封装的一个JSONUtil工具类,代码如下:
package com.amaker.json;


import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.protocol.HTTP;
import org.json.JSONException;
import org.json.JSONObject;
import android.util.Log;

/**
 * @author zzl
 * Json封装的工具类.
 */
public class JSONUtil {
	
	private static final String TAG = "JSONUtil";
	
	/**
	 * 获取json内容
	 * @param  url
	 * @return JSONArray
	 * @throws JSONException 
	 * @throws ConnectionException 
	 */
	public static JSONObject getJSON(String url) throws JSONException, Exception {
		
		return new JSONObject(getRequest(url));
	}
	
	/**
	 * 向api发送get请求,返回从后台取得的信息。
	 * 
	 * @param url
	 * @return String
	 */
	protected static String getRequest(String url) throws Exception {
		return getRequest(url, new DefaultHttpClient(new BasicHttpParams()));
	}
	
	/**
	 * 向api发送get请求,返回从后台取得的信息。
	 * 
	 * @param url
	 * @param client
	 * @return String
	 */
	protected static String getRequest(String url, DefaultHttpClient client) throws Exception {
		String result = null;
		int statusCode = 0;
		HttpGet getMethod = new HttpGet(url);
		Log.d(TAG, "do the getRequest,url="+url+"");
		try {
			//getMethod.setHeader("User-Agent", USER_AGENT);

			HttpResponse httpResponse = client.execute(getMethod);
			//statusCode == 200 正常
			statusCode = httpResponse.getStatusLine().getStatusCode();
			Log.d(TAG, "statuscode = "+statusCode);
			//处理返回的httpResponse信息
			result = retrieveInputStream(httpResponse.getEntity());
		} catch (Exception e) {
			Log.e(TAG, e.getMessage());
			throw new Exception(e);
		} finally {
			getMethod.abort();
		}
		return result;
	}
	
	/**
	 * 处理httpResponse信息,返回String
	 * 
	 * @param httpEntity
	 * @return String
	 */
	protected static String retrieveInputStream(HttpEntity httpEntity) {
				
		int length = (int) httpEntity.getContentLength();		
		if (length < 0) length = 10000;
		StringBuffer stringBuffer = new StringBuffer(length);
		try {
			InputStreamReader inputStreamReader = new InputStreamReader(httpEntity.getContent(), HTTP.UTF_8);
			char buffer[] = new char[length];
			int count;
			while ((count = inputStreamReader.read(buffer, 0, length - 1)) > 0) {
				stringBuffer.append(buffer, 0, count);
			}
		} catch (UnsupportedEncodingException e) {
			Log.e(TAG, e.getMessage());
		} catch (IllegalStateException e) {
			Log.e(TAG, e.getMessage());
		} catch (IOException e) {
			Log.e(TAG, e.getMessage());
		}
		return stringBuffer.toString();
	}
}



编写主Activity代码MainActivity,代码如下:
package com.amaker.json;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import android.app.Activity;
import android.os.Bundle;
import android.widget.ImageView;
import android.widget.TextView;

public class MainActivity extends Activity {
	 private static final String BASE_URL = "http://open.ifenghui.cn/mobilecms/interface/mobile.action?code=888032100100&m=get_coolimages&p=1&filter=all";  
	 private TextView tv_n;  
	 private TextView tv_error;  
	 private TextView tv_p;  
	 private TextView tv_pcount;  
	 
	 private TextView tv_author;  
	 private ImageView img;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        init();
        getJSON();
    }
    /**
     * 实例化组件
     */
    public void init(){
    	tv_n = (TextView) findViewById(R.id.textView0);
    	tv_error = (TextView) findViewById(R.id.textView1);
    	tv_p = (TextView) findViewById(R.id.textView2);
    	tv_pcount = (TextView) findViewById(R.id.textView3);
    	tv_author = (TextView) findViewById(R.id.textView4);
    	img = (ImageView) findViewById(R.id.imageView1);
    }
    /**
     * 解析json数据
     */
    public void getJSON(){
    	try {  
    		//获取后台返回的Json对象   
    		JSONObject mJsonObject = JSONUtil.getJSON(BASE_URL);  
    		String n = mJsonObject.getString("n");  
    		String error = mJsonObject.getString("error");  
    		String p = mJsonObject.getString("p");  
    		String pcount = mJsonObject.getString("pcount");  
    		//获得图书数组   
    		JSONArray mJsonArray = mJsonObject.getJSONArray("result");  
    		//获取第一本图书   
    		JSONObject firstBook = mJsonArray.getJSONObject(0); 
    		String author = firstBook.getString("author");
    		tv_n.setText(n);
    		tv_error.setText(error);
    		tv_p.setText(p);
    		tv_pcount.setText(pcount);
    		tv_author.setText(author);
    		 
      } catch (JSONException e) {  
    		e.printStackTrace();  
      } catch (Exception e) {  
    	    e.printStackTrace();  
      }  

    }
    
}



main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
	xmlns:android="http://schemas.android.com/apk/res/android"
	android:orientation="vertical"
	android:layout_width="fill_parent"
	android:layout_height="fill_parent">
	<TextView
		android:layout_width="fill_parent"
		android:layout_height="wrap_content"
		android:id="@+id/textView0"
		android:text="@string/hello" />
	<TextView
		android:text="TextView"
		android:id="@+id/textView1"
		android:layout_width="wrap_content"
		android:layout_height="wrap_content" />
	<TextView
		android:text="TextView"
		android:id="@+id/textView2"
		android:layout_width="wrap_content"
		android:layout_height="wrap_content" />
	<TextView
		android:text="TextView"
		android:id="@+id/textView3"
		android:layout_width="wrap_content"
		android:layout_height="wrap_content" />
	<TextView
		android:text="TextView"
		android:id="@+id/textView4"
		android:layout_width="wrap_content"
		android:layout_height="wrap_content" />
	<ImageView
		android:layout_width="wrap_content"
		android:src="@drawable/icon"
		android:layout_height="wrap_content"
		android:id="@+id/imageView1" />
</LinearLayout>


AndroidManifest.xml:
记得添加访问网络的权限!!!!!!!
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.amaker.json"
      android:versionCode="1"
      android:versionName="1.0">
    <uses-sdk android:minSdkVersion="10" />

    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".MainActivity"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

    </application>
    <uses-permission android:name="android.permission.INTERNET"></uses-permission> 
</manifest>
  • 大小: 9.1 KB
  • 大小: 17 KB
  • 大小: 43.7 KB
分享到:
评论

相关推荐

    android json数据下载与解析demo

    这个“android json数据下载与解析demo”涵盖了Android开发中的多个重要概念,包括网络请求、JSON解析、异步操作以及数据展示。通过学习和实践这个示例,开发者可以更好地理解和掌握Android应用中与网络交互和数据...

    c#,JSON解析,字典Demo

    总结,C#中的JSON解析主要依赖于Json.NET库,通过`JsonConvert.DeserializeObject`方法可以方便地将JSON字符串转换为C#对象,包括字典类型。通过理解JSON的结构和C#的类型系统,可以高效地处理网络数据交换。在实际...

    android demo,json数据的处理,json字符串的发送和解析。

    这个“android demo”显然是一个展示如何在Android平台上处理JSON数据、发送JSON字符串以及进行JSON解析的示例项目。下面将详细阐述相关知识点。 一、JSON基础知识 1. JSON格式:JSON采用键值对的形式存储数据,键...

    ios下解析json的demo

    同时,记得在处理网络请求时考虑到异步操作,使用回调、闭包或协程等技术来处理数据。 总之,iOS开发中解析JSON是至关重要的技能,`NSJSONSerialization` 提供了简单且强大的工具来处理这一任务。通过熟练掌握这些...

    从网络获取解析json的android demo

    通过这个简单的Android Demo,我们可以学习到如何利用Volley从网络获取JSON数据,并对其进行解析。实际项目中,你可能还需要考虑网络连接的稳定性、数据缓存、错误重试等复杂情况。在开发过程中,确保遵循最佳实践,...

    使用Gson解析json数据

    6. **客户端代码**:`AppDemo`可能是一个客户端应用,它可能会发送HTTP请求到服务端,获取JSON响应,并使用Gson解析数据。在Android环境中,这通常涉及网络请求库(如Retrofit或Volley)和异步处理。 7. **数据库...

    SSH为android客户端返回json数据,demo1

    总结来说,这个主题涵盖了Android客户端通过SSH协议获取服务器返回的JSON数据,涉及SSH连接、JSON解析、并发处理等技术,对于学习Android网络编程和数据处理的开发者具有很高的参考价值。理解并掌握这一系列操作,...

    Highcharts json demo

    总结起来,"Highcharts json demo"项目展示了如何利用Highcharts与JSON数据结合,实现异步请求和数据可视化。这个过程涉及到前端的AJAX请求、JSON数据解析以及Highcharts的配置与渲染。掌握这些技术,不仅有助于提升...

    SSH为android客户端返回json数据,demo2

    3. **JSON解析**:服务器返回的通常是JSON格式的数据,这需要使用Android的内置库如`org.json`或第三方库如Gson、Jackson或FastJson来解析。解析后的数据可以转化为Java对象,便于进一步处理和显示。 4. **Android ...

    c/c++ json-rpc demo

    在C语言中实现JSON-RPC,你需要一个JSON解析库,如json-c或yajl。这些库提供API来解析JSON字符串到C数据结构,以及将C数据结构转换回JSON字符串。对于RPC部分,你可以自己实现协议逻辑,或者使用现有的库,如libjson...

    jquery ajax servlet json简单demo

    这个简单的demo是一个很好的学习资源,帮助初学者理解如何使用jQuery的AJAX功能与后端Servlet交互,以及如何使用JSON进行数据交换。通过实践这个demo,你可以更深入地了解这些技术的实际应用。同时,它也展示了Web...

    http请求网络解析xml以及JSON的demo

    4. **JSON解析**:JSON(JavaScript Object Notation)是轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。Java有多个流行的JSON库,如Gson、Jackson和org.json。Gson直接将JSON字符串转换为Java...

    解析网络JSON报文demo工具

    4. **错误处理**:在网络请求或解析过程中,可能会遇到各种问题,如网络异常、JSON解析错误等。"ParseJsonDemo"工具类应包含适当的错误处理机制,确保在出现问题时能优雅地处理并提供反馈。 5. **灵活性与可扩展性*...

    Json-Demo[1]

    总的来说,JSON-Demo[1]可能是关于如何使用JSON进行数据交换的示例,可能包括创建、解析JSON对象,以及在JavaScript(可能配合jQuery库)中与服务器进行数据交互的实践。这个示例可能通过提供一个简单的JSON数据结构...

    ios demo,JSONString to NSDictionary,字符串JSON数据转换到字典数据

    5. **性能优化**:大量JSON数据解析可能影响性能,考虑使用异步操作或缓存机制以提高用户体验。 在“test_NSDictinary_NSString_toDictionary”这个示例中,可能包含了如何从JSON字符串创建`NSDictionary`对象的...

    json解析,异步下载(listview仅滑动时加载)Demo

    1.解析json格式数据,主要包括图片,文本 2.使用线程和AsynTask俩种异步方式从网络下载图片 3.handler的使用 4.使用Lru缓存算法 5.改进加载:仅在listview滑动停止后才加载可见项,滑动中不加载

    fastjson+ajax+sppringmvc前后使用json传值的demo

    本示例“fastjson+ajax+sppringmvc前后使用json传值的demo”展示了如何利用这些技术进行高效的数据传输。以下是相关知识点的详细说明: 1. JSON:JSON是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于...

    Ajax_Json_jQuery详细Demo

    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成,是网络数据交换的常用格式。现在,我们来详细探讨这三个技术在实际应用中的相关知识点。 1. **Ajax*...

    安卓listview相关相关-这是一个包含异步加载网络编程JSON解析LruCache图片缓存的简易的ListView图文混排Demo.rar

    这个Demo项目涵盖了多个关键知识点,包括异步加载、网络编程、JSON解析以及LruCache图片缓存策略,这些都是在实际开发中处理数据流和用户体验优化的重要技术。 1. **异步加载**: 在Android中,为了防止UI线程被...

    ASP 解析AJAX提交的JSON数据的实例

    1. **创建JSON解析器**:在服务器端的ASP文件中,首先创建一个ScriptControl对象,并设置其Language属性为"JScript",因为JSON.parse()函数是JavaScript的一部分。 ```vbscript Dim jsonCtrl Set jsonCtrl = Server...

Global site tag (gtag.js) - Google Analytics