JsonObject生成Json字符串,并且解析为对象-----JsonReader解析Json字符串

原创 2016年05月31日 15:42:42

MainActivity

package com.example.gsondemo;

import java.io.IOException;

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

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;

public class MainActivity extends Activity {
	private String jsonDate = "["
	           + "{\"id\": 912345678901,"
	           + "\"text\":\"How do I read JSON onAndroid?\","
	            + "\"geo\":null,"
	           +"\"user\":{\"name\":\"android_newb\",\"followers_count\":41}},"
	           + "{\"id\": 912345678902,"
	           + "\"text\":\"@android_newb just useandroid.util.JsonReader!\","
	           + "\"geo\":[50.454722,-104.606667],"
	           +"\"user\":{\"name\":\"jesse\",\"followers_count\":2}}"
	           + "]";
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		try {
			/**
			 * 1、JsonReader解析json字符串,根据需求生成对象
			 */
			new JsonUtils().parseJson(jsonDate);
		} catch (IOException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
		try {
			/**
			 * 2、JsonObject生成json字符串
			 */
			String createJson = createJson();
			Log.i("TAG", "createJson:::" + createJson);
			/**
			 * 3、JsonObject解析json字符串
			 */
			pareJson(createJson);
		} catch (JSONException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}

	
	
	/**
	 * 1、生成Json字符串
	 * {"intKey":123,"doubleKey":10.1,"longKey":666666666,"stringKey":"lalala",
	 * "booleanKey"
	 * :true,"arrayKey":[111,"second"],"innerObjectKey":{"innerStr":"inner"}}
	 */
	private String createJson() throws JSONException {
		JSONObject jsonObject = new JSONObject();
		jsonObject.put("intKey", 123);
		jsonObject.put("doubleKey", 10.1);
		jsonObject.put("longKey", 666666666);
		jsonObject.put("stringKey", "lalala");
		jsonObject.put("booleanKey", true);

		JSONArray jsonArray = new JSONArray();
		jsonArray.put(111);
		jsonArray.put("second");
		jsonObject.put("arrayKey", jsonArray);

		JSONObject innerJsonObject = new JSONObject();
		innerJsonObject.put("innerStr", "inner");
		jsonObject.put("innerObjectKey", innerJsonObject);


		return jsonObject.toString();
	}

	private void pareJson(String jsonStr) throws JSONException {
		JSONObject jsonObject = new JSONObject(jsonStr);
		int intValue = jsonObject.optInt("intKey");
		double doubleValue = jsonObject.optDouble("doubleKey");
		long longValue = jsonObject.optLong("longKey");
		String strValue = jsonObject.optString("stringKey");
		boolean boolValue = jsonObject.optBoolean("booleanKey");

		JSONArray array = jsonObject.optJSONArray("arrayKey");
		int arrIntValue = array.optInt(0);
		String arrStrValue = array.optString(1);

		JSONObject innerJson = jsonObject.optJSONObject("innerObjectKey");
		String innerStr = innerJson.optString("innerStr");

		Log.e("Json", "intValue = " + intValue + " , doubleValue = "
				+ doubleValue + " , longValue = " + longValue
				+ " , strValue = " + strValue + " , booleanValue = "
				+ boolValue + " , arrIntValue = " + arrIntValue
				+ " , arrStrValue = " + arrStrValue + " , innerStr = "
				+ innerStr);
	}
}

JsonUtils

package com.example.gsondemo;

import java.io.IOException;
import java.io.StringReader;
import android.util.JsonReader;
import android.util.JsonToken;
import android.util.Log;

public class JsonUtils {
	/**
	 * [
   {
    "id": 912345678901,
    "text": "How do I read JSON on Android?",
    "geo": null,
    "user": {
       "name": "android_newb",
      "followers_count": 41
    } 
   },
   {
    "id": 912345678902,
    "text": "@android_newb just useandroid.util.JsonReader!",
    "geo": [50.454722, -104.606667],
    "user": {
      "name": "jesse",
      "followers_count": 2
    }
   }
 ]
	 */
	public void parseJson(String jsonDate) throws IOException {
		// 创建JsonReader对象
		JsonReader jsReader = new JsonReader(new StringReader(jsonDate));
		jsReader.beginArray();
		while (jsReader.hasNext()) {
			readMessage(jsReader);
		}
		jsReader.endArray();

	}

	public void readMessage(JsonReader jsReader) throws IOException {
		jsReader.beginObject();
		while (jsReader.hasNext()) {
			String tagName = jsReader.nextName();
			if (tagName.equals("id")) {
				Log.i("TAG", "name:" + jsReader.nextLong());
			} else if (tagName.equals("text")) {
				Log.i("TAG", "text:" + jsReader.nextString());
			} else if (tagName.equals("geo")
					&& jsReader.peek() != JsonToken.NULL) {
				readDoubleArray(jsReader);
			} else if (tagName.equals("user")) {
				readUser(jsReader);
			} else {
				// 跳过当前值
				jsReader.skipValue();
				Log.i("TAG", "skip======>");
			}
		}
		jsReader.endObject();
	}

	// 解析geo中的数据
	public void readDoubleArray(JsonReader jsReader) throws IOException {
		jsReader.beginArray();
		while (jsReader.hasNext()) {
			Log.i("TAG", "readDoubleArray:" + jsReader.nextDouble());
		}
		jsReader.endArray();
	}

	/**
	 * 
	 * "user": { "name": "jesse", "followers_count": 2 } 由于读取user中的数据
	 * 
	 * @param jsReader
	 * @throws IOException
	 */
	public void readUser(JsonReader jsReader) throws IOException {
		String userName = null;
		int followsCount = -1;

		jsReader.beginObject();
		while (jsReader.hasNext()) {
			String tagName = jsReader.nextName();
			if (tagName.equals("name")) {
				userName = jsReader.nextString();
				Log.i("TAG", "user_name:" + userName);
			} else if (tagName.equals("followers_count")) {
				followsCount = jsReader.nextInt();
				Log.i("TAG", "followers_count:" + followsCount);
			}
		}
		jsReader.endObject();
	}
}



你不知道的JSON的高效率用法

1.JSON JSON是JavaScript Object Notation的缩写,是JavaScript标准的一个子集。官方Android API已经内置支持读写JSON数据。这种格式非常适合表示不...

Gson全解析之二:JsonReader的其它方法

上篇文章的示例代码 String json = "{\"name\":\"wisely\",\"age\":\"18\"}"; private void readJson2User(){ ...

JsonReader解析json和JsonWriter生成json

最近学习了googleAPI中自带的一个解析和生成json的API jsonReader: 需要解析的json如下: {      "id": 912345678901,      "tex...

【第14篇】通过GSON的JsonReader去读取数据处理json数据

通过GSON的JsonReader去读取数据处理json数据

Ext.data.JsonReader的用法

一、作用      Ext.data.JsonReader主要用于从服务器端读取以Json格式读取数据,并显示在前端页面中。 二、具体用法      1、前端写法       //设置...

使用Gson的JsonReader解析Json数据

原址:http://blog.csdn.net/jackie_xiaonan/article/details/15026901 自定义解析过程         这里把问题简化一下,...

Android读写JSON格式的数据之JsonWriter和JsonReader

最近的好几个月都没有搞Android编程了,逐渐的都忘却了一些东西。最近打算找一份Android的工作,要继续拾起以前的东西。公司月初搬家之后就一直没有网络,直到今日公司才有网络接入,各部门才开始办公...

JSON快速转换为JAVA对象

JSON文件: { "Json解析":"支持格式化高亮折叠", "支持XML转换":"支持XML转换Json,Json转XML", "Json格式验证":"更详细准确的错误信息" { "...

关于使用C++ json库一些错误的解决方法

json官网 http://www.json.org/ json资源下载地址 http://sourceforge.net/projects/jsoncpp/ 下载json库后,进入makef...
  • hzqhbc
  • hzqhbc
  • 2013年07月25日 15:30
  • 9500

Android在listview添加checkbox实现单选多选操作问题

在 android 某些开发需求当中,有时候需要在listveiw中加入checkbox实现单选,多选操作。表面上看上去只是改变checkbox那么简单,然而实际开发中,实现起来并不是那么得心应手。尤...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JsonObject生成Json字符串,并且解析为对象-----JsonReader解析Json字符串
举报原因:
原因补充:

(最多只允许输入30个字)