`
Bauble
  • 浏览: 67697 次
  • 性别: Icon_minigender_1
  • 来自: Mercury
社区版块
存档分类
最新评论

Android37_JSON数据解析

阅读更多

 

一、JSON介绍

       JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括CC++C#JavaJavaScriptPerlPython等)。这些特性使JSON成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成。

       1.JSON数据是一系列键值对的集合;

       2.JSON已经被大多数开发人员接受,在网络数据传输当中应用非常广泛;

       3.JSON相对于XML解析方便一些。

JSONXML对比:

       1.JSONXML的数据可读性基本相同;

       2.JSONXML同样拥有丰富的解析手段;

       3.JSON相对于XML来讲,传递同等价值的信息时数据体积小;

       4.JSONJavaScript交换更加方便;

       5.JSON对数据的描述性相对较差。

 

二、JSON数据格式特点

JSON数据格式例子:

[
{
    "name" : "allorry",
	"age" : 25
    	"address" :
    	{
    		"city" : "BeiJing",
    		"postCode" : 123456
    	}
},
{
    "name" : "bauble",
	"age" : 25
    	"address" :
    	{
    		"city" : "BeiJing",
    		"postCode" : 123456
    	}
}
]

 {}代表了一个JSON对象,里面是一个个键值对,而[]代表了是一个JSON数组,里面是多个JSON对象。

 

三、使用Gson解析JSON数据

       Android API中可以使用JsonReader进行JSON数据的解析,但是JsonReader是针对3.0版以上的SDK,所以并不适合现在使用。可以使用googleGson进行JSON数据的解析。其实JsonReader就是将Google-gson添加到了Android SDK当中,只不过在3.0版本以下没有。使用方法和效果是一样的。Gson是自包含的,不依赖其他类库。

       要想使用Google-gson需要下载gsonjar包:

http://code.google.com/p/google-gson/

例子程序:

       首先需要在buildpath当中添加gson.jar

JSONActivity.Java

package com.android.activity;
import java.io.IOException;
import java.io.StringReader;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import com.google.gson.stream.JsonReader;
public class JSONActivity extends Activity {
	private Button button = null;
	private String jsonData = "";
	@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        jsonData = "[{\"name\" : \"allorry\",\"age\" : 25}
			,{\"name\" : \"bauble\",\"age\" : 25}]";
        button = (Button)findViewById(R.id.button);
        button.setOnClickListener(new ButtonListener());
    }
	class ButtonListener implements OnClickListener{
		public void onClick(View v) {
			try {
				parseJSON(jsonData);
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
    public void parseJSON(String jsonData) throws IOException{
    	//如果需要解析JSON数据,要生成一个JsonReader对象
    	JsonReader reader = new JsonReader(new StringReader(jsonData));
    	//表示现在已经开始解析数组了,解析数组-解析对象-解析键值对-解析对象结束-解析数组结束
    	reader.beginArray();
    	//判断有没有对象
    	while(reader.hasNext()){
    		reader.beginObject();
    		//判断有没有键值对
    		while(reader.hasNext()){
    			String tagName = reader.nextName();
    			if(tagName.equals("name")){
    				System.out.println("name - "+reader.nextString());
    			}else if(tagName.equals("age")){
    				System.out.println("age - "+reader.nextInt());
    			}
    		}
    		reader.endObject();
    	}
    	reader.endArray();
    }
} 

运行结果:


 另外,使用Gson可以很方便的将json对象转换为我们自己定义的对象:

User.java

package com.android.activity;
public class User {
	private String name;
	private int age;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
}

 JSONActivity.java

package com.android.activity;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import com.google.gson.Gson;
public class JSONActivity extends Activity {
	private Button button = null;
	private String jsonData = "";
	@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        jsonData = "{\"name\" : \"allorry\",\"age\" : 25}";
        button = (Button)findViewById(R.id.button);
        button.setOnClickListener(new ButtonListener());
    }
	class ButtonListener implements OnClickListener{
		public void onClick(View v) {
			Gson gson = new Gson();
			//得到对象,参数1:json数据对象,参数2:希望转换成的类对象
			User user = gson.fromJson(jsonData, User.class);
			System.out.println("name - "+user.getName());
			System.out.println("age - "+user.getAge());
		}
	}
}

 输出结果:


如果想要JSON数组转换成多个的User对象,可以使用TypeToken

private void parseUserFromJson(String jsonData){
	Type listType = new TypeToken<LinkedList<User>>(){}.getType();
	Gson gson = new Gson();
	LinkedList<User> userList = gson.fromJson(jsonData, listType);
	for(Iterator<User> i = userList.iterator();i.hasNext();){
		User user = (User)i.next();
		System.out.println("name - "+user.getName());
		System.out.println("age - "+user.getAge());
	}
} 

  注意:此时jsonData传进来的是一个JSON数组。

 

  • 大小: 12.8 KB
  • 大小: 10.7 KB
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    Android_JSON数据解析

    本篇将详细讲解如何在Android应用中解析JSON数据,主要涉及以下几个方面: 1. JSON基本结构 JSON由两种基本结构构成:对象(Object)和数组(Array)。对象是以花括号 `{}` 包围的键值对集合,键用双引号括起,如`...

    Android_JSON_RPC_0.zip_JSON_android json_android-CS_json android

    在Android中,我们通常使用`org.json`库来解析和生成JSON数据。例如,一个简单的JSON对象可能如下所示: ```json { "name": "John", "age": 30, "city": "New York" } ``` 在这个例子中,`name`、`age`和`city`...

    Android中Json数据解析

    本教程将深入探讨在Android中如何解析和处理JSON数据。 首先,我们需要理解JSON的基本结构。JSON是一种基于键值对的数据表示方式,主要由对象(Object)和数组(Array)构成。对象用花括号 `{}` 包裹,键值对以冒号...

    JSON_demo.zip_DEMO_JSON_android_android json

    5. **AsyncTask或线程管理**:由于Android主线程不支持耗时操作,解析JSON数据通常在后台线程进行,如使用`AsyncTask`或者`Thread`配合`Handler`。 6. **JSON解析**:解析JSON字符串,创建对应的Java对象,例如使用...

    Android_JSON.zip

    在Android开发中,数据解析是一项基础且重要的任务,它涉及到应用程序如何处理来自网络、本地存储或其他数据源的数据。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,被广泛用于Android应用中,...

    json-jiexi-Android.zip_JSON_android_android json

    在提供的"Testjson"文件中,可能包含了一个示例JSON数据,你可以按照上述步骤进行解析和展示。实际开发中,还需要考虑错误处理,如网络请求失败、JSON解析异常等情况,以确保应用的健壮性。同时,随着Android发展,...

    Android 实用的数据json数据解析封装类

    本篇文章将详细介绍如何创建一个实用的JSON数据解析封装类,以便快速有效地处理各种形式的JSON数据。 首先,我们需要引入一个JSON库,Android SDK本身包含了org.json库,但为了更强大的功能和更好的性能,推荐使用...

    android_json解析

    总的来说,Android中的JSON解析是通过选择合适的库,结合网络请求库,对获取的JSON数据进行解析,将其转换为可操作的Java对象,以便于在应用程序中使用。在处理过程中,还需要注意性能、错误处理和安全性等方面,以...

    android 动态解析获取json数据的键值对

    在Android开发中,有时我们需要从服务器获取JSON数据并解析它以展示在应用中。这个"android 动态解析获取json数据的键值对"的项目就是针对这种情况的一个实例,主要展示了如何在Eclipse环境下,不预先创建JSON键值...

    android之json和gson数据解析最完整的代码例子(包括各种样式的json数据)

    本文将详细介绍如何在Android应用中使用JSON和Gson进行数据解析,并通过实际代码示例来演示各种类型的JSON数据处理。 一、JSON基础 1. JSON格式:JSON是一种轻量级的数据交换格式,它采用完全独立于语言的文本格式...

    JSON2.rar_JSON_android_json2java

    本资料主要探讨了如何在Android环境中解析和生成JSON数据,特别提到了将JSON数据转换为Java对象的技术——json2java。 首先,了解JSON的基本结构至关重要。JSON基于JavaScript的一个子集,主要由键值对(key-value ...

    android_json所需jar包

    总之,"android_json所需jar包"是Android开发中处理JSON数据所必需的依赖,它包含了解析和构造JSON对象的基本工具。随着Android版本和开发工具的更新,这些库可能已经内置,但理解其作用和使用方式对于任何Android...

    android-json-server-and-client.rar_Android 服务 客户_JSON_JSONClient

    综上所述,本教程涵盖了Android环境下JSON的服务器端和客户端实现,从数据解析到网络请求,以及具体的应用示例,为开发者提供了全面的参考。通过学习这些内容,你可以更好地理解和应用JSON在Android开发中的作用。

    android JSON解析数据 android解析天气预报

    笔者近期做到对天气预报JSON数据解析,在此小记。 天气预报接口:http://wthrcdn.etouch.cn/weather_mini?citykey=101200101 JSON数据如下: { desc: OK, status: 1000, data: { wendu: 14, ganmao: 天气...

    Android JSON数据的封装及解析

    本教程将深入讲解如何在Android中对JSON数据进行封装和解析,以便于在应用程序中有效使用。 一、JSON基础知识 JSON是一种独立于语言的数据表示格式,它基于ECMAScript的一个子集。一个基本的JSON对象由键值对组成,...

    Android 安卓 json解析

    对于本地JSON文件解析,首先我们需要读取JSON数据。在Android中,这通常通过`AssetManager`类完成,因为JSON文件常存放在`assets`目录下。 ```java try { AssetManager assetManager = getAssets(); InputStream ...

    Android_Post_Json4_1能够上传下载json数据

    1. **解析JSON数据**:Android提供了`org.json`库,可以用来解析JSON字符串。`JSONObject`用于处理键值对,而`JSONArray`则用于处理数组。例如,你可以使用`new JSONObject(jsonString)`来创建一个JSONObject对象,...

    android_php_mysql_json-(2).zip_android_android mysql

    在Android端,你需要使用`JSONObject`或`JSONArray`类来解析从服务器返回的JSON数据。Android SDK提供了`org.json`包,可以方便地进行JSON对象的创建、解析和操作。一旦解析完成,这些数据可以用于更新UI或者存储在...

    老罗android 解析json数据源码

    本教程聚焦于老罗讲解的Android解析JSON数据的源码分析,这对于深入理解JSON处理以及优化应用程序性能至关重要。 首先,我们需要了解JSON的基本结构。JSON是一种基于键值对的格式,数据以键值对的形式存储,如{"key...

    android中JSON数据解析

    在Android开发中,JSON...总的来说,Android中的JSON数据解析是通过理解JSON结构,结合`org.json`库或Gson库,以及适当的网络请求库来实现的。合理使用这些工具,能有效地处理和展示从服务器获取的JSON数据。

Global site tag (gtag.js) - Google Analytics