[转]JSONObject与JSONArray的使用 .
原文链接:http://coolxing.iteye.com/blog/1211403 原文地址
什么是JSON:
JSON即JavaScript Object Natation, 它是一种轻量级的数据交换格式, 与XML一样, 是广泛被采用的客户端和服务端交互的解决方案.
JSON对象: JSON中对象(Object)以"{"开始, 以"}"结束. 对象中的每一个item都是一个key-value对, 表现为"key:value"的形式, key-value对之间使用逗号分隔. 如:{"name":"coolxing", "age"=24, "male":true, "address":{"street":"huiLongGuan", "city":"beijing", "country":"china"}}. JSON对象的key只能是string类型的, 而value可以是string, number, false, true, null, Object对象甚至是array数组, 也就是说可以存在嵌套的情况.
JSON数组: JSON数组(array)以"["开始, 以"]"结束, 数组中的每一个元素可以是string, number, false, true, null, Object对象甚至是array数组, 数组间的元素使用逗号分隔. 如["coolxing", 24, {"street":"huiLongGuan", "city":"beijing", "country":"china"}].
JSON数据的解析:解析JSON数据, 首先需要明确待解析的是JSON Object还是JSON array, 然后需要确定采用哪种解析技术. android平台上一般有2种解析技术可供选择: android内置的org.json包和google的开源gson库. 以下将分别采用这两种技术解析JSON对象和JSON数组.
1. 采用android内置的org.json包解析JSON对象. 假设待解析的JSON数据为json = "{\"name\":\"coolxing\", \"age\"=24, \"male\":true, \"address\":{\"street\":\"huiLongGuan\", \"city\":\"beijing\", \"country\":\"china\"}}", 其中\用于转义表达式中的双引号. 首先定义2个JavaBean:
- public class Address {
- private String street;
- private String city;
- private String country;
- public Address() {
- super();
- }
- public Address(String street, String city, String country) {
- super();
- this.street = street;
- this.city = city;
- this.country = country;
- }
- public String getStreet() {
- return street;
- }
- public void setStreet(String street) {
- this.street = street;
- }
- public String getCity() {
- return city;
- }
- public void setCity(String city) {
- this.city = city;
- }
- public String getCountry() {
- return country;
- }
- public void setCountry(String country) {
- this.country = country;
- }
- @Override
- public String toString() {
- return "Address [street=" + street + ", city=" + city + ", country="
- + country + "]";
- }
- }
- public class Person {
- private String name;
- private int age;
- private boolean male;
- private Address address;
- public Person() {
- super();
- }
- public Person(String name, int age, boolean male, Address address) {
- super();
- this.name = name;
- this.age = age;
- this.male = male;
- this.address = address;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public int getAge() {
- return age;
- }
- public void setAge(int age) {
- this.age = age;
- }
- public boolean isMale() {
- return male;
- }
- public void setMale(boolean male) {
- this.male = male;
- }
- public Address getAddress() {
- return address;
- }
- public void setAddress(Address address) {
- this.address = address;
- }
- @Override
- public String toString() {
- return "Person [name=" + name + ", age=" + age + ", male=" + male
- + ", address=" + address + "]";
- }
- }
下面是具体的解析代码:
- JSONObject jsonObject = new JSONObject(json);
- String name = jsonObject.getString("name");
- int age = jsonObject.getInt("age");
- boolean male = jsonObject.getBoolean("male");
- JSONObject addressJSON = jsonObject.getJSONObject("address");
- String street = addressJSON.getString("street");
- String city = addressJSON.getString("city");
- String country = addressJSON.getString("country");
- Address address = new Address(street, city, country);
- Person person = new Person(name, age, male, address);
- System.out.println(person);
LogCat的输出为Person [name=coolxing, age=24, male=true, address=Address [street=huiLongGuan, city=beijing, country=china]], 说明已经正确解析了JSON对象.
2. 采用gson库解析JSON对象. 假设带解析的JSON数据是json = "{\"name\":\"coolxing\", \"age\"=24, \"male\":true, \"address\":{\"street\":\"huiLongGuan\", \"city\":\"beijing\", \"country\":\"china\"}}", 首先需要到http://code.google.com/p/google-gson/下载jar包, 并将其添加到项目中. 具体的解析代码如下:
- Gson gson = new Gson();
- Person person = gson.fromJson(json, Person.class);
- System.out.println(person);
LogCat的输出为Person [name=coolxing, age=24, male=true, address=Address [street=huiLongGuan, city=beijing, country=china]], 说明已经正确解析了JSON对象, 是不是很简单?
3. 采用android内置的org.json包解析JSON数组. 假设待解析的JSON数据为json = "[{\"name\":\"coolxing\", \"age\"=24, \"male\":true, \"address\":{\"street\":\"huiLongGuan\", \"city\":\"beijing\", \"country\":\"china\"}}, {\"name\":\"min\", \"age\"=20, \"male\":false, \"address\":{\"street\":\"heiShiJiao\", \"city\":\"daLian\", \"country\":\"china\"}}]", 解析代码如下:
- List<Person> persons = new ArrayList<Person>();
- JSONArray jsonArray = new JSONArray(json);
- for(int i = 0; i < jsonArray.length(); i++) {
- JSONObject jsonObject = jsonArray.getJSONObject(i);
- String name = jsonObject.getString("name");
- int age = jsonObject.getInt("age");
- boolean male = jsonObject.getBoolean("male");
- JSONObject addressJSON = jsonObject.getJSONObject("address");
- String street = addressJSON.getString("street");
- String city = addressJSON.getString("city");
- String country = addressJSON.getString("country");
- Address address = new Address(street, city, country);
- Person person = new Person(name, age, male, address);
- persons.add(person);
- }
- System.out.println(persons);
LogCat的输出为[Person [name=coolxing, age=24, male=true, address=Address [street=huiLongGuan, city=beijing, country=china]], Person [name=min, age=20, male=false, address=Address [street=heiShiJiao, city=daLian, country=china]]], 说明已经正确解析了JSON数组.
4. 采用gson库解析JSON数组. 待解析的JSON数据同上, 具体代码为:
- Gson gson = new Gson();
- Type listType = new TypeToken<List<Person>>(){}.getType();
- List<Person> persons = gson.fromJson(json, listType);
参考资料:
http://bantouyan.iteye.com/category/143891
http://bantouyan.iteye.com/blog/962448
http://json-lib.sourceforge.net/apidocs/jdk15/index.html
http://fuchangle.iteye.com/blog/1488039
本文转自Work Hard Work Smart博客园博客,原文链接:http://www.cnblogs.com/linlf03/archive/2013/03/27/2985255.html,如需转载请自行联系原作者

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
翻译:Adobe AIR 2.6的新特性
本文由RIAMeeting翻译,您可以自由转载,但请注明原文和译文地址,谢谢 原文地址: http://blogs.adobe.com/cantrell/archives/2011/03/everything-new-in-adobe-air-2-6.html Adobe AIR 2.6 现在已经上线了 (运行时 和 SDK). 当前2.6的工作重点是均衡Android和iOS的功能实现(译者注:之前由于某些原因,AIR2.5的功能特性主要是针对Android平台开发的), 当然我们也悄悄的针对SDK,Android,桌面性能等方面提供了一些好的特性。 下面是AIR 2.6所提供的新特性的列表. 异步位图解码. 这个特性将允许我们在主线程之外,另起一个线程完成对位图的解码。设置 LoaderContext的imageDecodingPolicy 属性的值为ImageDecodingPolicy.ON_LOAD,来启用异步位图解码,这样可以让您的应用更加灵活,动画更流畅。专属窗口(Owned Windows). 专属窗口适用于像调色板工具这样的情况。专属窗口特性允许您关联一个窗口和其它窗...
- 下一篇
Android仿WIN8系统磁贴点击下沉倾斜效果
※效果 ※使用说明 Java代码 import android.app.Activity; import android.os.Bundle; import android.widget.Toast; public class TestRolateAnimActivity extends Activity { /** Called when the activity is first created. */ MyImageView joke; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); joke=(MyImageView) findViewById(R.id.c_joke); joke.setOnClickIntent(new MyImageView.OnViewClick() { @Override public void onClick() { // TODO Auto-ge...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- 设置Eclipse缩进为4个空格,增强代码规范
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- CentOS8编译安装MySQL8.0.19
- Windows10,CentOS7,CentOS8安装Nodejs环境
- CentOS关闭SELinux安全模块
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- Red5直播服务器,属于Java语言的直播服务器