Android 中解析 JSON
openkk
13年前
<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>