加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 18:57:25 所属栏目:百科 来源:网络整理
导读: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 cla

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,"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();
	}
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读