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