初识JSON

<span style="font-size: 24px; font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">	</span><span style="font-size: 24px; font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">JSON:一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性。业内主流技术为其提供了完整的解决方案(有点类似于正则表达式 ,获得了当今大部分语言的支持),从而可以在不同平台间进行数据交换。JSON采用兼容性很高的文本格式,同时也具备类似于C语言体系的行为。</span>


JSON在Android中org.json包中,主要有以下几个类:


JSONObject:可以看作是一个JSON对象,这是系统中有关JSON定义的基本单元,其包含一对儿(Key/Value)数值。可以用toString()方法输出一个键值对字符串(du对外部(External:应用toString()方法输出的数值)调用的响应体现为一个标准的字符串)(例如:{"JSON": "Hello, World"},最外被大括号包裹,其中的Key和Value被冒号":"分隔)。其对于内部(Internal)行为的操作格式略微,例如:初始化一个JSONObject实例,引用内部的put()方法添加数值:new JSONObject().put("JSON", "Hello, World!"),在Key和Value之间是以逗号","分隔。Value的类型包括:Boolean、JSONArray、JSONObject、Number、String或者默认值JSONObject.NULL object 。


JSONStringer:json文本构建类 ,根据官方的解释,这个类可以帮助快速和便捷的创建JSON text。其最大的优点在于可以减少由于 格式的错误导致程序异常,引用这个类可以自动严格按照JSON语法规则(syntax rules)创建JSON text。每个JSONStringer实体只能对应创建一个JSON text。。其最大的优点在于可以减少由于格式的错误导致程序异常,引用这个类可以自动严格按照JSON语法规则(syntax rules)创建JSON text。每个JSONStringer实体只能对应创建一个JSON text。


JSONArray:它代表一组有序的数值。将其转换为String输出(toString)所表现的形式是用方括号包裹,数值以逗号”,”分隔(例如: [value1,value2,value3],大家可以亲自利用简短的代码更加直观的了解其格式)。这个类的内部同样具有查询行为,get()和opt()两种方法都可以通过index索引返回指定的数值,put()方法用来添加或者替换数值。同样这个类的value类型可以包括:Boolean、JSONArray、JSONObject、Number、String或者默认值JSONObject.NULL object。


JSONTokener:json解析类;


JSONException:json中用到的异常 。


自定义JSON数据:

{
	stuno:"58504226",
	stuname:"apollo",
	book:[
		{bookname:"C++",bookprice:12},
		{bookname:"C#",bookprice:18},
		{bookname:"JAVA",bookprice:15}
	]
}


实例:

</pre><p></p><p><span style="font-size:24px;"></span><pre name="code" class="java">package com.ytu.mode_client;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;

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

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;

public class MainActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		try {
			// InputStream:输入流,一个字节一个字节的读
			InputStream is = getAssets().open("json_type.txt");
			
			// InputStreamReader:InputStream的修饰流,把is字节流包裹起来的一个装饰流,读入一行信息
			InputStreamReader isr = new InputStreamReader(is);
			
			// BufferedReader:装饰流,带缓冲的读写的流,包裹isr
			BufferedReader br = new BufferedReader(isr);
			
			//将成行读出的信息存进builder
			StringBuilder builder = new StringBuilder();
			String line; 
			
			// 将文件中的信息按行读取出来,直到为null,将每一行的信息连接到builder上
			while ((line = br.readLine()) != null) {
				builder.append(line);
			}
			//打印builder中的信息
			System.out.println(builder.toString()+"----------------");
			
			// 定义JSON对象,并把上面读取出来的builder对象转成字符串封装成JSON对象
			JSONObject student = new JSONObject(builder.toString());
			System.out.println(student.get("stuno"));
			// 按照字符串中键值对的格式,根据键值获得值
			String stuno = student.getString("stuno");
			String stuname = student.getString("stuname");
			//打印
			System.out
					.println("stuno:" + stuno + "----" + "stuname:" + stuname);
			// 获得JSON数组
			// 通过键获得book的JSON数组
			JSONArray array = student.getJSONArray("book");
			for (int i = 0; i < array.length(); i++) {
				JSONObject book = array.getJSONObject(i);
				String bookname = book.getString("bookname");
				int bookprice = book.getInt("bookprice");
				//打印
				System.out.println("bookname:" + bookname + "----"
						+ "bookprice:" + bookprice);
			}
		} catch (Exception e) {
			e.printStackTrace(); 
		}
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		// Handle action bar item clicks here. The action bar will
		// automatically handle clicks on the Home/Up button, so long
		// as you specify a parent activity in AndroidManifest.xml.
		int id = item.getItemId();
		if (id == R.id.action_settings) {
			return true;
		}
		return super.onOptionsItemSelected(item);
	}
}
logcat运行输出:


猜你喜欢

转载自blog.csdn.net/w7239/article/details/52769153