Android 中解析 JSON

openkk 12年前
     <p><span style="font-size:medium;"><strong>什么是JSON?</strong></span></p>    <p><span style="font-size:small;">1.JSON:Javascript Object Nation</span></p>    <p><span style="font-size:small;">2.JSON是一系列键值对的集合</span></p>    <p><span style="font-size:small;">3.JSON以经被大多数开发人员接受,在网络数据传输中应用相当广泛</span></p>    <p><span style="font-size:small;">4.JSON相对XML来说解析相对方便一些</span></p>    <p> </p>    <p><span style="font-size:medium;"><strong>JSON vs XML</strong></span></p>    <p><span style="font-size:small;">1.JSON 和 XML 可读性基本相同</span></p>    <p><span style="font-size:small;">2.JSON 和 XML 同样有丰富的解析手段</span></p>    <p><span style="font-size:small;">3.JSON相对XML来说体积数据小</span></p>    <p><span style="font-size:small;">4.JSON和Javascript的交互更加方便</span></p>    <p><span style="font-size:small;">5.JSON对数据的描述性相对较差</span></p>    <p> </p>    <p><span style="font-size:small;">有什么不懂的可以去官网去看看:<a href="/misc/goto?guid=4959498118645888318">www.json.org</a></span></p>    <p><span style="font-size:small;"><br /> </span></p>    <p><span style="font-size:small;">在google android中也有关于解析JSON的类库:JsonReader,但是只能在3.0以后的版本中才可以用,在这里我们用google提供的类库google-gson,可以从<a href="/misc/goto?guid=4958193114092262929">code.google.com/p/google-gson/</a>下载jar包。</span></p>    <p><span style="font-size:small;"><br /> </span></p>    <p><span style="font-size:small;">下面通过一个小例子来学习一下:</span></p>    <p><span style="font-size:small;"><br /> </span></p>    <p><span style="font-size:small;">例子:</span></p>    <p><span style="font-size:small;">[{"name":"zhangsan","age":22},{"name":"lisi","age":23}]</span></p>    <p><span style="font-size:small;">分析:</span></p>    <p><span style="font-size:small;">1.开始解析数组</span></p>    <p><span style="font-size:small;">2.开始解析对象</span></p>    <p><span style="font-size:small;">3.解析键值对</span></p>    <p><span style="font-size:small;">4.解析键值对</span></p>    <p><span style="font-size:small;">5.解析对象结束</span></p>    <p><span style="font-size:small;">6.开始解析对象</span></p>    <p><span style="font-size:small;">7.解析键值对</span></p>    <p><span style="font-size:small;">8.解析键值对</span></p>    <p><span style="font-size:small;">9.解析对象结束</span></p>    <p><span style="font-size:small;">10.解析数组结束</span></p>    <p><span style="font-size:small;"><br /> </span></p>    <p><span style="font-size:small;"><br /> </span></p>    <p><span style="font-size:small;">下面的是一个Activity,很简单只有一个button,并为button添加单击事件,</span></p>    <pre class="brush:java; toolbar: true; auto-links: false;">package com.tony.json;  import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.Button;  public class JsonActivity extends Activity {     /** Called when the activity is first created. */    private String jsonData = "[{\"name\":\"zhangsan\",\"age\":22},{\"name\":\"lisi\",\"age\":23}]";  private Button jsonButton;     @Override     public void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         setContentView(R.layout.main);         jsonButton = (Button) findViewById(R.id.json_button);         jsonButton.setOnClickListener(new View.OnClickListener() {        @Override    public void onClick(View v) {     JsonUtils jsonUtils = new JsonUtils();     jsonUtils.parseJson(jsonData);    }   });     } }</pre>    <p></p>    <p><span style="font-size:small;">这个类中主要是解析json数组:</span></p>    <pre class="brush:java; toolbar: true; auto-links: false;">package com.tony.json;  import java.io.IOException; import java.io.StringReader;  import android.util.Log;  import com.google.gson.stream.JsonReader;  public class JsonUtils {  private static final String TAG = "JsonUtils";    public void parseJson(String jsonData){   JsonReader reader = new JsonReader(new StringReader(jsonData));   try {    reader.beginArray(); // 开始解析数组    while (reader.hasNext()) {     reader.beginObject(); // 开始解析对象     while (reader.hasNext()) {      String tagName = reader.nextName(); // 得到键值对中的key      if (tagName.equals("name")) { // key为name时       Log.i(TAG, "name--------->" + reader.nextString()); // 得到key中的内容      }else if (tagName.equals("age")) { // key为age时       Log.i(TAG, "age--------->" + reader.nextInt()); // 得到key中的内容      }     }     reader.endObject();    }    reader.endArray();   } catch (IOException e) {    e.printStackTrace();   }  } }</pre>    <p></p>    <p><span style="font-size:small;">下面是运行后在logcat中打印出的结果:<img title="Android 中解析 JSON " border="0" alt="Android 中解析 JSON " src="https://simg.open-open.com/show/00fccbe07be5c0c8fd1dc611a9386b49.jpg" width="717" height="92" /></span></p> 转自:    <a href="/misc/goto?guid=4959500089162803414" target="_blank">http://tonysun3544.iteye.com/blog/1330027</a>