JSON 解析

google android中也有关于解析JSON的类库:JsonReader,但是只能在3.0以后的版本中才可以用。

import java.io.IOException;
import java.io.StringReader;

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

import com.google.gson.Gson;

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

public class JSonTestActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    //  {  
//      "phone" : ["12345678", "87654321"], // 数组  
//      "name" : "yuanzhifei89", // 字符串  
//      "age" : 100, // 数值  
//      "address" : { "country" : "china", "province" : "jiangsu" }, // 对象  
//      "married" : false // 布尔值  
//  }
        String json = "{" +
        		"	\"phone\":[\"12345678\",\"87654321\"]," +
        		"	\"name\":\"jinyp89\"," +
        		"	\"age\":100," +
        		"	\"address\":{\"country\":\"china\",\"province\":\"Liaoning\"}," +
        		"	\"married\":false" +
        		"}";
        String json1 = initJSON();
        parseJSON(json1);
        
        String json2 = createWithJSONStringer();
        parseJSON(json2);
        
        parseJsonWithIndex(json);
        
        parseJsonWithJsonReader(json);
    }
    
    private String initJSON(){
    	try {
    		JSONObject person = new JSONObject();
	    	JSONArray phone = new JSONArray();
	    	phone.put("12345678").put("87654321");
			person.put("phone", phone);
			
			person.put("name", "jinyp");
			person.put("age", 100); 
			
			JSONObject address = new JSONObject();
			address.put("country", "china");
			address.put("province", "LiaoNing");
			person.put("address", address);
			
			person.put("married", false);
			Log.i("jin", "initJSON =" + person.toString());
			return person.toString();
		} catch (JSONException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			throw new RuntimeException(e);
		}
    	
    }
    
    private String createWithJSONStringer(){
    	try {
    		JSONStringer jsonText = new JSONStringer();
			jsonText.object();
			
			jsonText.key("phone");
			jsonText.array();
			jsonText.value("12345678").value("87654321");
			jsonText.endArray();
			
			jsonText.key("name");
			jsonText.value("jinyp");
			
			jsonText.key("age");
			jsonText.value(100);
			
			jsonText.key("address");
			jsonText.object();
			jsonText.key("country");
			jsonText.value("china");
			jsonText.key("province");
			jsonText.value("Liaoning");
			jsonText.endObject();
			
			jsonText.key("married");
			jsonText.value(false);
			
			jsonText.endObject();
			Log.i("jin", "createWithJSONStringer = " + jsonText.toString());
			return jsonText.toString();
		} catch (JSONException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			throw new RuntimeException(e);
		}
    	
    }
    
    private void parseJSON(String json){
    	try {
    		JSONTokener parseJson = new JSONTokener(json);
			JSONObject person = (JSONObject) parseJson.nextValue();
			JSONArray phone = person.getJSONArray("phone");
			Log.i("jin", "parseJSON ..phone1" + phone.getString(0)  + " phone1  " + phone.getString(1));

			String name = (String)person.get("name");
			Log.i("jin", "parseJSON ..name = " + name);
			JSONObject address = person.getJSONObject("address");
			Log.i("jin", "parseJSON ..address...country =" + address.get("country") +  " province = " +address.getString("province"));
			int age = person.getInt("age");
			Log.i("jin", "parseJSON ..age = " + age);
			boolean married = person.getBoolean("married");
			Log.i("jin", "parseJSON ..married = " + married);
			
			JSONArray phone_opt = person.optJSONArray("phone");
			String name_opt = person.optString("name");
			JSONObject address_opt = person.optJSONObject("address");
			int age_opt = person.optInt("age");
			boolean married_opt = person.getBoolean("married");
			
		} catch (JSONException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
    	
    }
    
    private void parseJsonWithIndex(String json){
    	try {
    		JSONTokener parse = new JSONTokener(json);
			Log.i("jin", "parseJsonWithIndex...1= "+parse.next(8));
			Log.i("jin", "parseJsonWithIndex...2= "+parse.next());
			Log.i("jin", "parseJsonWithIndex...3= "+parse.nextClean());
			Log.i("jin", "parseJsonWithIndex...4= "+parse.nextString('a'));
			Log.i("jin", "parseJsonWithIndex...5= "+parse.nextTo("0089"));
			parse.back();
			Log.i("jin", "parseJsonWithIndex...6= "+parse.next());
			parse.skipPast("address");
			Log.i("jin", "parseJsonWithIndex...7= "+parse.next(8));
			parse.skipTo('m');
			Log.i("jin", "parseJsonWithIndex...7= "+parse.next(8));
		} catch (JSONException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
    }
    
    private void parseJsonWithJsonReader(String json){
    	StringReader reader = new StringReader(json);
    	JsonReader parse = new JsonReader(reader);
    	Log.i("jin", "parseJsonWithJsonReader");
    	try {
			parse.beginObject();
			StringBuffer sb = new StringBuffer();
			while(parse.hasNext()){
				String tagName = parse.nextName();
				if ("phone".equals(tagName)){
					parse.beginArray();
					while(parse.hasNext()){
						Log.i("jin", "phone..."+ parse.nextString());
					}
					parse.endArray();
				} else if ("name".equals(tagName)){
					Log.i("jin", "name..."+ parse.nextString());
				} else if ("address".equals(tagName)){
					parse.beginObject();
					while(parse.hasNext()){
						String subTag = parse.nextName();
						if("country".equals(subTag)){
							Log.i("jin", "country..."+ parse.nextString());
						} else if ("province".equals(subTag)){
							Log.i("jin", "province..."+ parse.nextString());
						}
					} 
					parse.endObject();
				} else if ("age".equals(tagName)){
					Log.i("jin", "age..."+ parse.nextInt());
				} else if ("married".equals(tagName)){
					Log.i("jin", "married..." + parse.nextBoolean());
				}
				
			}
			parse.endObject();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
    }
 }



 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值