Java中数据解析之_JSON(Android官方内置解析器)

    对JSON,我们有如下的两个类:
A:对象JSONObject
              |---构造方法
                     |---JSONObject(String source);把一个String类型的字符串转成JSON对象
                     |---JSONObject(Map map);把一个Map集合转成JSON对象
                     |---JSONObject(Object obj)把obj转成JSON对象
              |---get(String key)根据键取到值
              |---getInt(String key) 根据键取到Int类型的值
              |---getString(String key)根据键取到String类型的值
              |---getDouble(String key)根据键取到Double类型的值
              |---getJSONObject(String key)得到JSON里面的对象
B:数组JSONArray
            |---构造方法
                  |---JSONArray(Collection collection)  把一个集合转成JSON数组
                  |---JSONArray(String source)把一个字符串转成JSON数组---这个字符串一定要可转   
            |---getJSONObject(int index)得到JSON数组下标为index的JSON对象    
    首先,我们对JSONObject进行分析,通过其构造方法,我们可以将一个字符串,Map对象和Object对象转成JSON对象
    然后通过上面介绍的几个方法对数据进行解析处理:
   
   
package com.ctgu.classing;
import java.util.HashMap;
import java.util.Map;
 
import org.json.JSONObject;
 
public class TestJSON {
 
public static void main(String[] args) {
String str = "{'name':'Bill' , 'age':25}";
String str1 = "{people:{'name':'Bill' , 'age':25}}";
Map<String, Integer> map = new HashMap<>();
map.put("zhangsan", 35);
try {
//对字符串进行解析(一)
JSONObject obj = new JSONObject(str);
System.out.print(obj.getString("name")+" ");
System.out.println(obj.getString("age"));
System.out.println("-----------我是华丽丽的分割线-----------");
//对字符串进行解析(二)
JSONObject obj2 = new JSONObject(str1);
JSONObject o = obj2.getJSONObject("people");
System.out.print(o.getString("name")+" ");
System.out.println(o.getString("age"));
System.out.println("-----------我是华丽丽的分割线-----------");
//对Map进行解析
JSONObject obj1 = new JSONObject(map);
System.out.println(obj1.toString());
System.out.println("-----------我是华丽丽的分割线-----------");
//对对象进行解析
People p = new People("张三", 35);
JSONObject object = new JSONObject(p);// /使用JAVA反射原理{"stu":{}}
System.out.println(object);
} catch (Exception e) {
e.printStackTrace();
}
}
}
下面是People类,比较简单!
   
   
package com.ctgu.classing;
 
public class People {
private String name;
private int age;
 
public People() {
// TODO Auto-generated constructor stub
}
 
@Override
public String toString() {
return "People [name=" + name + ", age=" + age + "]";
}
 
public String getName() {
return name;
}
 
public void setName(String name) {
this.name = name;
}
 
public int getAge() {
return age;
}
 
public void setAge(int age) {
System.out.println("-----------setAge");
this.age = age;
}
 
public People(String name, int age) {
super();
this.name = name;
this.age = age;
}
}
      贴出运行结果:
   
   
Bill 25
-----------我是华丽丽的分割线-----------
Bill 25
-----------我是华丽丽的分割线-----------
{"zhangsan":35}
-----------我是华丽丽的分割线-----------
{"age":35,"name":"张三"}

       然后,我们来使用 JSONArray对数据进行解析,体会其中的差别!
   
   
package com.ctgu.classing;
 
import java.util.ArrayList;
import java.util.List;
 
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
 
public class TestJSON01 {
 
public static void main(String[] args) {
String str = "{ 'people': [{ 'firstName': 'Brett', 'lastName':'McLaughlin', 'email': "
+ "'aaaa' },{ 'firstName': 'Jason', 'lastName':'Hunter', 'email': 'bbbb'},{ "
+ "'firstName': 'Elliotte', 'lastName':'Harold', 'email': 'cccc' }]}";
try {
//对上面的数据进行解析
JSONObject obj = new JSONObject(str);
JSONArray obj1 = obj.getJSONArray("people");
for (int i = 0; i < obj1.length(); i++) {
JSONObject o = obj1.getJSONObject(i);
System.out.println(o.get("firstName"));
System.out.println(o.get("lastName"));
System.out.println(o.get("email"));
}
System.out.println("-------------华丽丽的分界线--------------");
//将list加入到JSONObject中
List<People> list = new ArrayList<>();//[{},{},{}]
list.add(new People("zs", 88));
list.add(new People("ls", 77));
list.add(new People("ww", 66));
list.add(new People("zl", 55));
JSONArray array=new JSONArray(list);
for (int i = 0; i < array.length(); i++) {
System.out.print(array.getJSONObject(i).getString("name")+" ");
System.out.println(array.getJSONObject(i).getString("age"));
}
} catch (JSONException e) {
e.printStackTrace();
}
}
 
}
    贴出运行结果:
   
   
Brett
McLaughlin
aaaa
Jason
Hunter
bbbb
Elliotte
Harold
cccc
-------------华丽丽的分界线--------------
zs 88
ls 77
ww 66
zl 55
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值